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 9a458befdd)

Co-authored-by: samtygier <samtygier@yahoo.co.uk>
This commit is contained in:
Miss Islington (bot) 2022-06-16 07:07:30 -07:00 committed by GitHub
parent b62d37c4a5
commit 5c10c365fe
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
_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"