Skip to content
This repository was archived by the owner on Feb 4, 2020. It is now read-only.

Commit 041df7c

Browse files
authored
Merge pull request #201 from hubx/mutex-fix
Hotfix race condition in mutex creation/deletion
2 parents 625e6b0 + 650cf8f commit 041df7c

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

clcache.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -259,11 +259,14 @@ class CacheLock(object):
259259

260260
def __init__(self, mutexName, timeoutMs):
261261
self._mutexName = 'Local\\' + mutexName
262+
self._mutex = None
263+
self._timeoutMs = timeoutMs
264+
265+
def createMutex(self):
262266
self._mutex = windll.kernel32.CreateMutexW(
263-
wintypes.INT(0),
264-
wintypes.INT(0),
267+
None,
268+
wintypes.BOOL(False),
265269
self._mutexName)
266-
self._timeoutMs = timeoutMs
267270
assert self._mutex
268271

269272
def __enter__(self):
@@ -273,9 +276,12 @@ def __exit__(self, typ, value, traceback):
273276
self.release()
274277

275278
def __del__(self):
276-
windll.kernel32.CloseHandle(self._mutex)
279+
if self._mutex:
280+
windll.kernel32.CloseHandle(self._mutex)
277281

278282
def acquire(self):
283+
if not self._mutex:
284+
self.createMutex()
279285
result = windll.kernel32.WaitForSingleObject(
280286
self._mutex, wintypes.INT(self._timeoutMs))
281287
if result not in [0, self.WAIT_ABANDONED_CODE]:

0 commit comments

Comments
 (0)