changeset: 70832:a73e5c1f57d7 parent: 70830:276530424350 parent: 70831:e6e7e42efdc2 user: Victor Stinner date: Fri Jun 17 12:36:26 2011 +0200 files: Lib/multiprocessing/process.py description: (Merge 3.2) 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 -r 276530424350 -r a73e5c1f57d7 Lib/multiprocessing/process.py --- a/Lib/multiprocessing/process.py Fri Jun 17 12:20:46 2011 +0200 +++ b/Lib/multiprocessing/process.py Fri Jun 17 12:36:26 2011 +0200 @@ -267,9 +267,15 @@ 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()