|
1 | 1 | """Provides shared memory for direct access across processes. |
| 2 | +
|
2 | 3 | The API of this package is currently provisional. Refer to the |
3 | 4 | documentation for details. |
4 | 5 | """ |
|
22 | 23 | from . import _posixshmem |
23 | 24 | _USE_POSIX = True |
24 | 25 |
|
| 26 | +from . import resource_tracker |
25 | 27 |
|
26 | 28 | _O_CREX = os.O_CREAT | os.O_EXCL |
27 | 29 |
|
@@ -113,8 +115,7 @@ def __init__(self, name=None, create=False, size=0): |
113 | 115 | self.unlink() |
114 | 116 | raise |
115 | 117 |
|
116 | | - from .resource_tracker import register |
117 | | - register(self._name, "shared_memory") |
| 118 | + resource_tracker.register(self._name, "shared_memory") |
118 | 119 |
|
119 | 120 | else: |
120 | 121 |
|
@@ -170,7 +171,10 @@ def __init__(self, name=None, create=False, size=0): |
170 | 171 | ) |
171 | 172 | finally: |
172 | 173 | _winapi.CloseHandle(h_map) |
173 | | - size = _winshmem.VirtualQuerySize(p_buf) |
| 174 | + try: |
| 175 | + size = _winshmem.VirtualQuerySize(p_buf) |
| 176 | + finally: |
| 177 | + _winshmem.UnmapViewOfFile(p_buf) |
174 | 178 | self._mmap = mmap.mmap(-1, size, tagname=name) |
175 | 179 |
|
176 | 180 | self._size = size |
@@ -233,9 +237,8 @@ def unlink(self): |
233 | 237 | called once (and only once) across all processes which have access |
234 | 238 | to the shared memory block.""" |
235 | 239 | if _USE_POSIX and self._name: |
236 | | - from .resource_tracker import unregister |
237 | 240 | _posixshmem.shm_unlink(self._name) |
238 | | - unregister(self._name, "shared_memory") |
| 241 | + resource_tracker.unregister(self._name, "shared_memory") |
239 | 242 |
|
240 | 243 |
|
241 | 244 | _encoding = "utf8" |
|
0 commit comments