From 56fbe3fe63adf4e7c5b47400182cd857d145d5b0 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Mon, 8 Oct 2012 08:08:51 -0700 Subject: test_ipc_daemon: handle fork/finally race --- pym/portage/tests/ebuild/test_ipc_daemon.py | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'pym/portage/tests/ebuild/test_ipc_daemon.py') diff --git a/pym/portage/tests/ebuild/test_ipc_daemon.py b/pym/portage/tests/ebuild/test_ipc_daemon.py index a87107625..b88fce695 100644 --- a/pym/portage/tests/ebuild/test_ipc_daemon.py +++ b/pym/portage/tests/ebuild/test_ipc_daemon.py @@ -36,6 +36,7 @@ class IpcDaemonTestCase(TestCase): def testIpcDaemon(self): event_loop = global_event_loop() tmpdir = tempfile.mkdtemp() + main_pid = os.getpid() build_dir = None try: env = {} @@ -135,6 +136,14 @@ class IpcDaemonTestCase(TestCase): self.assertEqual(proc.returncode == os.EX_OK, False) finally: + + # Ensure that finally blocks don't run in forked subprocesses + # before they are able to exec or _exit themselves, since the + # fork might fail or be killed before it can setup its own + # try/finally/_exit routine. See bug #345289. + if os.getpid() != main_pid: + os._exit(1) + if build_dir is not None: build_dir.unlock() shutil.rmtree(tmpdir) -- cgit v1.2.3-65-gdbad