Skip to content

Commit dbdab82

Browse files
appliovinay0410
authored andcommitted
Eliminated premature destruction of shared memory segments by resource tracker.
1 parent d9a966a commit dbdab82

File tree

4 files changed

+0
-57
lines changed

4 files changed

+0
-57
lines changed

Lib/multiprocessing/managers.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1316,14 +1316,6 @@ class SharedMemoryManager(BaseManager):
13161316
_Server = SharedMemoryServer
13171317

13181318
def __init__(self, *args, **kwargs):
1319-
if os.name == "posix":
1320-
# bpo-36867: Ensure the resource_tracker is running before
1321-
# launching the manager process, so that concurrent
1322-
# shared_memory manipulation both in the manager and in the
1323-
# current process does not create two resource_tracker
1324-
# processes.
1325-
from . import resource_tracker
1326-
resource_tracker.ensure_running()
13271319
BaseManager.__init__(self, *args, **kwargs)
13281320
util.debug(f"{self.__class__.__name__} created by pid {getpid()}")
13291321

Lib/multiprocessing/resource_tracker.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939

4040
_CLEANUP_FUNCS.update({
4141
'semaphore': _multiprocessing.sem_unlink,
42-
'shared_memory': _posixshmem.shm_unlink,
4342
})
4443

4544

Lib/multiprocessing/shared_memory.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,6 @@ def __init__(self, name=None, create=False, size=0):
114114
self.unlink()
115115
raise
116116

117-
from .resource_tracker import register
118-
register(self._name, "shared_memory")
119-
120117
else:
121118

122119
# Windows Named Shared Memory
@@ -235,9 +232,7 @@ def unlink(self):
235232
called once (and only once) across all processes which have access
236233
to the shared memory block."""
237234
if _USE_POSIX and self._name:
238-
from .resource_tracker import unregister
239235
_posixshmem.shm_unlink(self._name)
240-
unregister(self._name, "shared_memory")
241236

242237

243238
_encoding = "utf8"

Lib/test/_test_multiprocessing.py

Lines changed: 0 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -4120,49 +4120,6 @@ def test_shared_memory_ShareableList_pickling(self):
41204120
deserialized_sl.shm.close()
41214121
sl.shm.close()
41224122

4123-
def test_shared_memory_cleaned_after_process_termination(self):
4124-
cmd = '''if 1:
4125-
import os, time, sys
4126-
from multiprocessing import shared_memory
4127-
4128-
# Create a shared_memory segment, and send the segment name
4129-
sm = shared_memory.SharedMemory(create=True, size=10)
4130-
sys.stdout.write(sm.name + '\\n')
4131-
sys.stdout.flush()
4132-
time.sleep(100)
4133-
'''
4134-
with subprocess.Popen([sys.executable, '-E', '-c', cmd],
4135-
stdout=subprocess.PIPE,
4136-
stderr=subprocess.PIPE) as p:
4137-
name = p.stdout.readline().strip().decode()
4138-
4139-
# killing abruptly processes holding reference to a shared memory
4140-
# segment should not leak the given memory segment.
4141-
p.terminate()
4142-
p.wait()
4143-
4144-
deadline = time.monotonic() + support.LONG_TIMEOUT
4145-
t = 0.1
4146-
while time.monotonic() < deadline:
4147-
time.sleep(t)
4148-
t = min(t*2, 5)
4149-
try:
4150-
smm = shared_memory.SharedMemory(name, create=False)
4151-
except FileNotFoundError:
4152-
break
4153-
else:
4154-
raise AssertionError("A SharedMemory segment was leaked after"
4155-
" a process was abruptly terminated.")
4156-
4157-
if os.name == 'posix':
4158-
# A warning was emitted by the subprocess' own
4159-
# resource_tracker (on Windows, shared memory segments
4160-
# are released automatically by the OS).
4161-
err = p.stderr.read().decode()
4162-
self.assertIn(
4163-
"resource_tracker: There appear to be 1 leaked "
4164-
"shared_memory objects to clean up at shutdown", err)
4165-
41664123
#
41674124
#
41684125
#

0 commit comments

Comments
 (0)