summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools
diff options
context:
space:
mode:
authorChangqing Li <changqing.li@windriver.com>2024-03-25 12:47:11 +0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2024-03-30 22:25:43 +0000
commit319353cd9d5afa4d1e349e18787697d65807932f (patch)
tree113c86317d5bd5dc19a6543cea58b71e33765804 /meta/recipes-devtools
parent9b839a835cc0746c59f9d74ef0e66c79280f8f13 (diff)
downloadpoky-319353cd9d5afa4d1e349e18787697d65807932f.tar.gz
dnf: fix Exception handling for class ProcessLock
Yocto based systems will sometimes have log_lock.pid left in target filesystems. Users typing 'ls /' will notice it, and will never be removed. It happened when log rotate happened, refer [1], since the problem descripted in patch 0001-lock.py-fix-Exception-handling.patch, file log_lock.pid will not be removed after dnf exit. For target system, refer [4], dnf have a solution to remove it. But for OE, refer commit [2][3], for fix another issue, OE changed log_lock.pid to root dir for native dnf, so solution in [4] not works for log_lock.pid under "/", so it will always exist under "/" of target system. Use patch 0001-lock.py-fix-Exception-handling.patch to fix the problem. [1] https://github.com/rpm-software-management/dnf/blob/a6d82221ae32045f0f788708a52d2f2bf5c5740b/dnf/logging.py#L127C31-L127C42 [2] https://git.openembedded.org/openembedded-core/commit/?id=742a1b71249f4da1c8d8e13e270b0eb6128a3f66 [3] https://git.openembedded.org/openembedded-core/commit/?id=7610f81586bd475f28fd3d89a7350771720c3264 [4] https://github.com/rpm-software-management/dnf/blob/master/etc/tmpfiles.d/dnf.conf (From OE-Core rev: d86c0e3468504c6ed19e38750abbb8970b5b7691) Signed-off-by: Changqing Li <changqing.li@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools')
-rw-r--r--meta/recipes-devtools/dnf/dnf/0001-lock.py-fix-Exception-handling.patch62
-rw-r--r--meta/recipes-devtools/dnf/dnf_4.19.0.bb1
2 files changed, 63 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 @@
1From 3881757eabfde2ff54400ab127b106ab085d83f0 Mon Sep 17 00:00:00 2001
2From: Changqing Li <changqing.li@windriver.com>
3Date: Wed, 13 Mar 2024 11:22:05 +0800
4Subject: [PATCH] lock.py: fix Exception handling
5
6Before, when logdir is not writable, _try_lock will raise an Exception
7like "Permission denied: '/var/log/log_lock.pid'", and in this case,
8_unlock_thread will not be called and the variable count will not be
9handled, it maybe cause log_lock.pid not be deleted in case like [1].
10
11For [1], it is an cross compile case, when dnf install some packages to
12rootfs, seems like some threads don't do chroot like work, some threads
13do chroot like work. so for the threads don't do chroot, "Permission denied"
14Exception happend, for the threads that do chroot, log_lock.pid will be
15created under installroot/var/log/log_lock.pid, since variable count not
16handled correct before, log_lock.pid may not be deleted correctly.
17
18So fixed like this, if _try_lock raise Exception, _unlock_thread first,
19then raise the Exception.
20
21[1] https://github.com/rpm-software-management/dnf/issues/1963
22
23Upstream-Status: Submitted [ https://github.com/rpm-software-management/dnf/pull/2065 ]
24
25Signed-off-by: Changqing Li <changqing.li@windriver.com>
26---
27 dnf/lock.py | 12 ++++++++++--
28 1 file changed, 10 insertions(+), 2 deletions(-)
29
30diff --git a/dnf/lock.py b/dnf/lock.py
31index 6817aac9..5718062a 100644
32--- a/dnf/lock.py
33+++ b/dnf/lock.py
34@@ -128,7 +128,11 @@ class ProcessLock(object):
35 self._lock_thread()
36 prev_pid = -1
37 my_pid = os.getpid()
38- pid = self._try_lock(my_pid)
39+ try:
40+ pid = self._try_lock(my_pid)
41+ except Exception:
42+ self._unlock_thread()
43+ raise
44 while pid != my_pid:
45 if pid != -1:
46 if not self.blocking:
47@@ -140,7 +144,11 @@ class ProcessLock(object):
48 logger.info(msg)
49 prev_pid = pid
50 time.sleep(1)
51- pid = self._try_lock(my_pid)
52+ try:
53+ pid = self._try_lock(my_pid)
54+ except Exception:
55+ self._unlock_thread()
56+ raise
57
58 def __exit__(self, *exc_args):
59 if self.count == 1:
60--
612.25.1
62
diff --git a/meta/recipes-devtools/dnf/dnf_4.19.0.bb b/meta/recipes-devtools/dnf/dnf_4.19.0.bb
index 784d7a94b3..184dbea963 100644
--- a/meta/recipes-devtools/dnf/dnf_4.19.0.bb
+++ b/meta/recipes-devtools/dnf/dnf_4.19.0.bb
@@ -15,6 +15,7 @@ SRC_URI = "git://github.com/rpm-software-management/dnf.git;branch=master;protoc
15 file://0029-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch \ 15 file://0029-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch \
16 file://0030-Run-python-scripts-using-env.patch \ 16 file://0030-Run-python-scripts-using-env.patch \
17 file://0001-set-python-path-for-completion_helper.patch \ 17 file://0001-set-python-path-for-completion_helper.patch \
18 file://0001-lock.py-fix-Exception-handling.patch \
18 " 19 "
19 20
20SRC_URI:append:class-native = "file://0001-dnf-write-the-log-lock-to-root.patch" 21SRC_URI:append:class-native = "file://0001-dnf-write-the-log-lock-to-root.patch"