From: Victor Stinner Date: Fri, 17 Jun 2011 10:31:49 +0000 (+0200) Subject: Issue #12310: finalize the old process after _run_after_forkers() X-Git-Tag: v3.2.1rc2~82 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0f83b1511c76e892b48b16d656cceb032bdb9cb3;p=thirdparty%2FPython%2Fcpython.git Issue #12310: finalize the old process after _run_after_forkers() multiprocessing: Process._bootstrap() keeps a reference to the old process to delay its finalization until after _run_after_forkers() as been executed. This change should fix a crash on Mac OS X Tiger when a lock is released after a fork. Patch written by Charles-François Nataliv and Antoine Pitrou. --- diff --git a/Lib/multiprocessing/process.py b/Lib/multiprocessing/process.py index b56a061079a1..941893fcc60e 100644 --- a/Lib/multiprocessing/process.py +++ b/Lib/multiprocessing/process.py @@ -251,9 +251,15 @@ class Process(object): sys.stdin = open(os.devnull) except (OSError, ValueError): pass + old_process = _current_process _current_process = self - util._finalizer_registry.clear() - util._run_after_forkers() + try: + util._finalizer_registry.clear() + util._run_after_forkers() + finally: + # delay finalization of the old process object until after + # _run_after_forkers() is executed + del old_process util.info('child process calling self.run()') try: self.run()