Take the lock before unlinking the mmap'ed shared memory to ensure
[python_utils.git] / collect / shared_dict.py
index 7c84c14c073743ea1e452d58393f8f29d280ed23..ec76138b393955d47f3850bf2a91d425ada563b1 100644 (file)
@@ -74,6 +74,7 @@ class SharedDict(object):
         super().__init__()
         self.name = name
         self._serializer = PickleSerializer()
+        assert size_bytes is None or size_bytes > 0
         self.shared_memory = self._get_or_create_memory_block(name, size_bytes)
         self._ensure_memory_initialization()
         self.lock = RLock()
@@ -89,7 +90,7 @@ class SharedDict(object):
         try:
             return shared_memory.SharedMemory(name=name)
         except FileNotFoundError:
-            assert size_bytes
+            assert size_bytes is not None
             return shared_memory.SharedMemory(name=name, create=True, size=size_bytes)
 
     def _ensure_memory_initialization(self):
@@ -107,7 +108,8 @@ class SharedDict(object):
     def cleanup(self) -> None:
         if not hasattr(self, 'shared_memory'):
             return
-        self.shared_memory.unlink()
+        with SharedDict.MPLOCK:
+            self.shared_memory.unlink()
 
     def clear(self) -> None:
         self._save_memory({})