summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2022-06-16 07:07:30 -0700
committerGitHub <noreply@github.com>2022-06-16 07:07:30 -0700
commit5c10c365fef3ca480c930cb379bf1d0ebadcd911 (patch)
treec9b50f98eb7d6e7c1fea6f04ae67a1cceb0578c1
parentb62d37c4a5016b3239c72c147de7f04a9be66e02 (diff)
downloadcpython-git-5c10c365fef3ca480c930cb379bf1d0ebadcd911.tar.gz
gh-91577: SharedMemory move imports out of methods (GH-91579)
SharedMemory.unlink() uses the unregister() function from resource_tracker. Previously it was imported in the method, but this can fail if the method is called during interpreter shutdown, for example when unlink is part of a __del__() method. Moving the import to the top of the file, means that the unregister() method is available during interpreter shutdown. The register call in SharedMemory.__init__() can also use this imported resource_tracker. (cherry picked from commit 9a458befdd68625d088f4fea7df135a57d147deb) Co-authored-by: samtygier <samtygier@yahoo.co.uk>
-rw-r--r--Lib/multiprocessing/shared_memory.py7
-rw-r--r--Misc/NEWS.d/next/Library/2022-04-15-17-38-55.gh-issue-91577.Ah7cLL.rst1
2 files changed, 4 insertions, 4 deletions
diff --git a/Lib/multiprocessing/shared_memory.py b/Lib/multiprocessing/shared_memory.py
index 122b3fcebf..881f2001dd 100644
--- a/Lib/multiprocessing/shared_memory.py
+++ b/Lib/multiprocessing/shared_memory.py
@@ -23,6 +23,7 @@ else:
import _posixshmem
_USE_POSIX = True
+from . import resource_tracker
_O_CREX = os.O_CREAT | os.O_EXCL
@@ -116,8 +117,7 @@ class SharedMemory:
self.unlink()
raise
- from .resource_tracker import register
- register(self._name, "shared_memory")
+ resource_tracker.register(self._name, "shared_memory")
else:
@@ -237,9 +237,8 @@ class SharedMemory:
called once (and only once) across all processes which have access
to the shared memory block."""
if _USE_POSIX and self._name:
- from .resource_tracker import unregister
_posixshmem.shm_unlink(self._name)
- unregister(self._name, "shared_memory")
+ resource_tracker.unregister(self._name, "shared_memory")
_encoding = "utf8"
diff --git a/Misc/NEWS.d/next/Library/2022-04-15-17-38-55.gh-issue-91577.Ah7cLL.rst b/Misc/NEWS.d/next/Library/2022-04-15-17-38-55.gh-issue-91577.Ah7cLL.rst
new file mode 100644
index 0000000000..0f44f34011
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-04-15-17-38-55.gh-issue-91577.Ah7cLL.rst
@@ -0,0 +1 @@
+Move imports in :class:`~multiprocessing.SharedMemory` methods to module level so that they can be executed late in python finalization.