bpo-36102: Prepend slash to all POSIX shared memory block names (#12036)

This commit is contained in:
Davin Potts 2019-02-25 16:41:52 -06:00 committed by GitHub
parent 8377cd4fcd
commit aadef2b416
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 10 additions and 4 deletions

View File

@ -30,7 +30,7 @@ _SHM_SAFE_NAME_LENGTH = 14
# Shared memory block name prefix # Shared memory block name prefix
if _USE_POSIX: if _USE_POSIX:
_SHM_NAME_PREFIX = 'psm_' _SHM_NAME_PREFIX = '/psm_'
else: else:
_SHM_NAME_PREFIX = 'wnsm_' _SHM_NAME_PREFIX = 'wnsm_'
@ -68,6 +68,7 @@ class SharedMemory:
_buf = None _buf = None
_flags = os.O_RDWR _flags = os.O_RDWR
_mode = 0o600 _mode = 0o600
_prepend_leading_slash = True if _USE_POSIX else False
def __init__(self, name=None, create=False, size=0): def __init__(self, name=None, create=False, size=0):
if not size >= 0: if not size >= 0:
@ -95,6 +96,7 @@ class SharedMemory:
self._name = name self._name = name
break break
else: else:
name = "/" + name if self._prepend_leading_slash else name
self._fd = _posixshmem.shm_open( self._fd = _posixshmem.shm_open(
name, name,
self._flags, self._flags,
@ -198,7 +200,11 @@ class SharedMemory:
@property @property
def name(self): def name(self):
"Unique name that identifies the shared memory block." "Unique name that identifies the shared memory block."
return self._name reported_name = self._name
if _USE_POSIX and self._prepend_leading_slash:
if self._name.startswith("/"):
reported_name = self._name[1:]
return reported_name
@property @property
def size(self): def size(self):
@ -224,8 +230,8 @@ class SharedMemory:
In order to ensure proper cleanup of resources, unlink should be In order to ensure proper cleanup of resources, unlink should be
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:
_posixshmem.shm_unlink(self.name) _posixshmem.shm_unlink(self._name)
_encoding = "utf8" _encoding = "utf8"