# HG changeset patch # Parent 8d44bbdcb770484c05b96b2e5345932541215962 diff -r 8d44bbdcb770 -r 2fada97488e2 Lib/multiprocessing/forking.py --- a/Lib/multiprocessing/forking.py Wed Apr 11 16:38:15 2012 +0100 +++ b/Lib/multiprocessing/forking.py Wed Apr 11 18:37:27 2012 +0100 @@ -35,6 +35,7 @@ import os import sys import signal +import gc from multiprocessing import util, process @@ -122,15 +123,20 @@ r, w = os.pipe() self.sentinel = r + gcenabled = gc.isenabled() + gc.disable() self.pid = os.fork() if self.pid == 0: os.close(r) if 'random' in sys.modules: import random random.seed() - code = process_obj._bootstrap() + code = process_obj._bootstrap(gcenabled) os._exit(code) + if gcenabled: + gc.enable() + # `w` will be closed when the child exits, at which point `r` # will become ready for reading (using e.g. select()). os.close(w) @@ -374,7 +380,7 @@ from_parent.close() - exitcode = self._bootstrap() + exitcode = self._bootstrap(False) exit(exitcode) diff -r 8d44bbdcb770 -r 2fada97488e2 Lib/multiprocessing/process.py --- a/Lib/multiprocessing/process.py Wed Apr 11 16:38:15 2012 +0100 +++ b/Lib/multiprocessing/process.py Wed Apr 11 18:37:27 2012 +0100 @@ -42,6 +42,7 @@ import sys import signal import itertools +import gc from _weakrefset import WeakSet # @@ -256,7 +257,7 @@ ## - def _bootstrap(self): + def _bootstrap(self, reenable_gc): from . import util global _current_process @@ -278,6 +279,8 @@ # delay finalization of the old process object until after # _run_after_forkers() is executed del old_process + if reenable_gc: + gc.enable() util.info('child process calling self.run()') try: self.run()