diff options
Diffstat (limited to 'meta/recipes-devtools/dnf/dnf/0001-lock.py-fix-Exception-handling.patch')
-rw-r--r-- | meta/recipes-devtools/dnf/dnf/0001-lock.py-fix-Exception-handling.patch | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/meta/recipes-devtools/dnf/dnf/0001-lock.py-fix-Exception-handling.patch b/meta/recipes-devtools/dnf/dnf/0001-lock.py-fix-Exception-handling.patch new file mode 100644 index 0000000000..6bffe9af0a --- /dev/null +++ b/meta/recipes-devtools/dnf/dnf/0001-lock.py-fix-Exception-handling.patch @@ -0,0 +1,62 @@ +From 3881757eabfde2ff54400ab127b106ab085d83f0 Mon Sep 17 00:00:00 2001 +From: Changqing Li <changqing.li@windriver.com> +Date: Wed, 13 Mar 2024 11:22:05 +0800 +Subject: [PATCH] lock.py: fix Exception handling + +Before, when logdir is not writable, _try_lock will raise an Exception +like "Permission denied: '/var/log/log_lock.pid'", and in this case, +_unlock_thread will not be called and the variable count will not be +handled, it maybe cause log_lock.pid not be deleted in case like [1]. + +For [1], it is an cross compile case, when dnf install some packages to +rootfs, seems like some threads don't do chroot like work, some threads +do chroot like work. so for the threads don't do chroot, "Permission denied" +Exception happend, for the threads that do chroot, log_lock.pid will be +created under installroot/var/log/log_lock.pid, since variable count not +handled correct before, log_lock.pid may not be deleted correctly. + +So fixed like this, if _try_lock raise Exception, _unlock_thread first, +then raise the Exception. + +[1] https://github.com/rpm-software-management/dnf/issues/1963 + +Upstream-Status: Submitted [ https://github.com/rpm-software-management/dnf/pull/2065 ] + +Signed-off-by: Changqing Li <changqing.li@windriver.com> +--- + dnf/lock.py | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +diff --git a/dnf/lock.py b/dnf/lock.py +index 6817aac9..5718062a 100644 +--- a/dnf/lock.py ++++ b/dnf/lock.py +@@ -128,7 +128,11 @@ class ProcessLock(object): + self._lock_thread() + prev_pid = -1 + my_pid = os.getpid() +- pid = self._try_lock(my_pid) ++ try: ++ pid = self._try_lock(my_pid) ++ except Exception: ++ self._unlock_thread() ++ raise + while pid != my_pid: + if pid != -1: + if not self.blocking: +@@ -140,7 +144,11 @@ class ProcessLock(object): + logger.info(msg) + prev_pid = pid + time.sleep(1) +- pid = self._try_lock(my_pid) ++ try: ++ pid = self._try_lock(my_pid) ++ except Exception: ++ self._unlock_thread() ++ raise + + def __exit__(self, *exc_args): + if self.count == 1: +-- +2.25.1 + |