diff options
author | Richard Oudkerk <roudkerk@google.com> | 2014-01-23 00:11:04 (GMT) |
---|---|---|
committer | Richard Oudkerk <roudkerk@google.com> | 2014-01-23 00:11:04 (GMT) |
commit | e8a57b98ec8f2b161d4ad68ecc1433c9e3caad57 (patch) | |
tree | fc91d6f80a2c3c047586b0a7fe709567a075ee7b | |
parent | 70fdd79c928eb07dfb20943e822fbecb5911b814 (diff) | |
download | cpython-e8a57b98ec8f2b161d4ad68ecc1433c9e3caad57.zip cpython-e8a57b98ec8f2b161d4ad68ecc1433c9e3caad57.tar.gz cpython-e8a57b98ec8f2b161d4ad68ecc1433c9e3caad57.tar.bz2 |
Issue #14548: Make multiprocessing finalizers check pid before
running to cope with possibility of gc running just after fork.
(Backport from 3.x.)
-rw-r--r-- | Lib/multiprocessing/util.py | 12 | ||||
-rw-r--r-- | Misc/NEWS | 4 |
2 files changed, 13 insertions, 3 deletions
diff --git a/Lib/multiprocessing/util.py b/Lib/multiprocessing/util.py index d1b3d2e..092b61c 100644 --- a/Lib/multiprocessing/util.py +++ b/Lib/multiprocessing/util.py @@ -32,6 +32,7 @@ # SUCH DAMAGE. # +import os import itertools import weakref import atexit @@ -184,6 +185,7 @@ class Finalize(object): 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 @@ class Finalize(object): 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 @@ -38,6 +38,10 @@ Core and Builtins 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. |