changeset: 88640:751371dd4d1c branch: 2.7 parent: 88636:d8af233da629 user: Richard Oudkerk date: Thu Jan 23 00:11:04 2014 +0000 files: Lib/multiprocessing/util.py Misc/NEWS description: Issue #14548: Make multiprocessing finalizers check pid before running to cope with possibility of gc running just after fork. (Backport from 3.x.) diff -r d8af233da629 -r 751371dd4d1c Lib/multiprocessing/util.py --- a/Lib/multiprocessing/util.py Wed Jan 22 13:18:09 2014 +0100 +++ b/Lib/multiprocessing/util.py Thu Jan 23 00:11:04 2014 +0000 @@ -32,6 +32,7 @@ # SUCH DAMAGE. # +import os import itertools import weakref import atexit @@ -184,6 +185,7 @@ self._args = args self._kwargs = kwargs or {} self._key = (exitpriority, _finalizer_counter.next()) + self._pid = os.getpid() _finalizer_registry[self._key] = self @@ -196,9 +198,13 @@ except KeyError: sub_debug('finalizer no longer registered') else: - sub_debug('finalizer calling %s with args %s and kwargs %s', - self._callback, self._args, self._kwargs) - res = self._callback(*self._args, **self._kwargs) + if self._pid != os.getpid(): + sub_debug('finalizer ignored because different process') + res = None + else: + sub_debug('finalizer calling %s with args %s and kwargs %s', + self._callback, self._args, self._kwargs) + res = self._callback(*self._args, **self._kwargs) self._weakref = self._callback = self._args = \ self._kwargs = self._key = None return res diff -r d8af233da629 -r 751371dd4d1c Misc/NEWS --- a/Misc/NEWS Wed Jan 22 13:18:09 2014 +0100 +++ b/Misc/NEWS Thu Jan 23 00:11:04 2014 +0000 @@ -38,6 +38,10 @@ Library ------- +- Issue #14548: Make multiprocessing finalizers check pid before + running to cope with possibility of gc running just after fork. + (Backport from 3.x.) + - Issue #20262: Warnings are raised now when duplicate names are added in the ZIP file or too long ZIP file comment is truncated.

AltStyle によって変換されたページ (->オリジナル) /