diff options
author | 2024-08-13 22:30:42 -0700 | |
---|---|---|
committer | 2024-08-14 08:22:05 -0700 | |
commit | cfd767cd35f5affd3b61b665b0f8814fe2de24c4 (patch) | |
tree | f01e4a50796d05b49e8165816c503276efd10f3a | |
parent | _EbuildFetcherProcess: Suppress CancelledError (diff) | |
download | portage-cfd767cd35f5affd3b61b665b0f8814fe2de24c4.tar.gz portage-cfd767cd35f5affd3b61b665b0f8814fe2de24c4.tar.bz2 portage-cfd767cd35f5affd3b61b665b0f8814fe2de24c4.zip |
run_exitfuncs: Drop hooks inherited via fork
Drop hooks inherited via fork because they can trigger redundant
actions as shown in bug 937891. Note that atexit hooks only work
after fork since issue 83856 was fixed in Python 3.13.
Bug: https://bugs.gentoo.org/937891
Signed-off-by: Zac Medico <zmedico@gentoo.org>
-rw-r--r-- | lib/portage/process.py | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/portage/process.py b/lib/portage/process.py index 38adebda6..e6f6feb35 100644 --- a/lib/portage/process.py +++ b/lib/portage/process.py @@ -208,7 +208,7 @@ def atexit_register(func, *args, **kargs): # which is associated with the current thread. global_event_loop()._coroutine_exithandlers.append((func, args, kargs)) else: - _exithandlers.append((func, args, kargs)) + _exithandlers.append((func, args, kargs, portage.getpid())) def run_exitfuncs(): @@ -222,7 +222,12 @@ def run_exitfuncs(): # original function is in the output to stderr. exc_info = None while _exithandlers: - func, targs, kargs = _exithandlers.pop() + func, targs, kargs, pid = _exithandlers.pop() + if pid != portage.getpid(): + # Drop hooks inherited via fork because they can trigger redundant + # actions as shown in bug 937891. Note that atexit hooks only work + # after fork since issue 83856 was fixed in Python 3.13. + continue try: func(*targs, **kargs) except SystemExit: |