Skip to content

Commit f6f8312

Browse files
committed
Define the rename method conditionally
1 parent cb181b0 commit f6f8312

File tree

2 files changed

+21
-26
lines changed

2 files changed

+21
-26
lines changed

Lib/multiprocessing/shared_memory.py

+20-22
Original file line numberDiff line numberDiff line change
@@ -254,28 +254,26 @@ def unlink(self):
254254
if self._track:
255255
resource_tracker.unregister(self._name, "shared_memory")
256256

257-
def rename(self, newname, flags=0):
258-
"""Renames a shared memory block.
259-
260-
The policy how the operation is handled depends on the flag passed.
261-
The default behavior is if the newname already exists, it will
262-
be unlinked beforehand.
263-
With the SHM_RENAME_EXCHANGE flag, the old and new name will
264-
be exchanged.
265-
With the SHM_RENAME_NOREPLACE flag, an error will be returned
266-
if the new name exists.
267-
"""
268-
if not hasattr(_posixshmem, "shm_rename"):
269-
raise OSError("Unsupported operation on this platform")
270-
271-
oldname = self._name
272-
if _USE_POSIX and self._prepend_leading_slash:
273-
newname = "/" + newname
274-
self._fd = _posixshmem.shm_rename(self._name, newname, flags)
275-
if self._track:
276-
resource_tracker.unregister(oldname, "shared_memory")
277-
resource_tracker.register(newname, "shared_memory")
278-
self._name = newname
257+
if hasattr(_posixshmem, "shm_rename"):
258+
def rename(self, newname, flags=0):
259+
"""Renames a shared memory block.
260+
261+
The policy how the operation is handled depends on the flag passed.
262+
The default behavior is if the newname already exists, it will
263+
be unlinked beforehand.
264+
With the SHM_RENAME_EXCHANGE flag, the old and new name will
265+
be exchanged.
266+
With the SHM_RENAME_NOREPLACE flag, an error will be returned
267+
if the new name exists.
268+
"""
269+
oldname = self._name
270+
if _USE_POSIX and self._prepend_leading_slash:
271+
newname = "/" + newname
272+
self._fd = _posixshmem.shm_rename(self._name, newname, flags)
273+
if self._track:
274+
resource_tracker.unregister(oldname, "shared_memory")
275+
resource_tracker.register(newname, "shared_memory")
276+
self._name = newname
279277

280278

281279
_encoding = "utf8"

Lib/test/_test_multiprocessing.py

+1-4
Original file line numberDiff line numberDiff line change
@@ -4376,11 +4376,8 @@ def test_shared_memory_recreate(self):
43764376
self.addCleanup(shm2.unlink)
43774377
self.assertEqual(shm2._name, names[1])
43784378

4379+
@unittest.skipUnless(hasattr(shared_memory, "rename"), "requires SharedMomery.rename")
43794380
def test_shared_memory_rename(self):
4380-
_posixshmem = import_helper.import_module("_posixshmem")
4381-
if not hasattr(_posixshmem, "shm_rename"):
4382-
raise unittest.SkipTest('requires _posixshmem.shm_rename')
4383-
43844381
name1 = self._new_shm_name('testrename01_tsmb')
43854382
name2 = self._new_shm_name('testrename02_tsmb')
43864383
sms = shared_memory.SharedMemory(name1, create=True, size=512)

0 commit comments

Comments
 (0)