Use posix buffer

This commit is contained in:
Nicolas Mowen 2024-11-16 07:08:19 -07:00
parent 707f62c891
commit 0ed221afd1

View File

@ -2,6 +2,7 @@
import datetime import datetime
import logging import logging
import mmap
import subprocess as sp import subprocess as sp
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from string import printable from string import printable
@ -736,21 +737,20 @@ class UntrackedSharedMemory:
self, self,
name: Optional[str] = None, name: Optional[str] = None,
create: bool = False, create: bool = False,
unlink: bool = False,
size: int = 0, size: int = 0,
) -> None: ) -> None:
if unlink:
return
flag = posix_ipc.O_CREAT if create else 0 flag = posix_ipc.O_CREAT if create else 0
self.shm_store = posix_ipc.SharedMemory(name, flags=flag, size=size) self.shm_store = posix_ipc.SharedMemory(name, flags=flag, size=size)
self.mm = mmap.mmap(self.shm_store.fd, 0)
self.buf = memoryview(self.mm)
def close(self) -> None: def close(self) -> None:
self.shm_store.fd_close() del self.buf
del self.mm
self.shm_store.close_fd()
def unlink(self, name: str) -> None: def unlink(self) -> None:
shm = posix_ipc.SharedMemory(name, flags=posix_ipc.O_TRUNC, size=0) self.shm_store.unlink()
shm.unlink()
class SharedMemoryFrameManager(FrameManager): class SharedMemoryFrameManager(FrameManager):
@ -787,14 +787,14 @@ class SharedMemoryFrameManager(FrameManager):
self.shm_store[name].close() self.shm_store[name].close()
try: try:
self.shm_store[name].unlink(name) self.shm_store[name].unlink()
except FileNotFoundError: except FileNotFoundError:
pass pass
del self.shm_store[name] del self.shm_store[name]
else: else:
try: try:
shm = UntrackedSharedMemory(name=name, unlink=True) shm = UntrackedSharedMemory(name=name)
shm.close() shm.close()
shm.unlink() shm.unlink()
except FileNotFoundError: except FileNotFoundError: