gh-91577: SharedMemory move imports out of methods (#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.
This commit is contained in:
samtygier 2022-06-16 14:41:51 +01:00 committed by GitHub
parent a38c2a61d5
commit 9a458befdd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 4 additions and 4 deletions

View file

@ -23,6 +23,7 @@ else:
import _posixshmem import _posixshmem
_USE_POSIX = True _USE_POSIX = True
from . import resource_tracker
_O_CREX = os.O_CREAT | os.O_EXCL _O_CREX = os.O_CREAT | os.O_EXCL
@ -116,8 +117,7 @@ class SharedMemory:
self.unlink() self.unlink()
raise raise
from .resource_tracker import register resource_tracker.register(self._name, "shared_memory")
register(self._name, "shared_memory")
else: else:
@ -237,9 +237,8 @@ class SharedMemory:
called once (and only once) across all processes which have access called once (and only once) across all processes which have access
to the shared memory block.""" to the shared memory block."""
if _USE_POSIX and self._name: if _USE_POSIX and self._name:
from .resource_tracker import unregister
_posixshmem.shm_unlink(self._name) _posixshmem.shm_unlink(self._name)
unregister(self._name, "shared_memory") resource_tracker.unregister(self._name, "shared_memory")
_encoding = "utf8" _encoding = "utf8"

View file

@ -0,0 +1 @@
Move imports in :class:`~multiprocessing.SharedMemory` methods to module level so that they can be executed late in python finalization.