summaryrefslogtreecommitdiff
path: root/src/virtualenv/util/lock.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/virtualenv/util/lock.py')
-rw-r--r--src/virtualenv/util/lock.py11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/virtualenv/util/lock.py b/src/virtualenv/util/lock.py
index 8d7215e..cf026f4 100644
--- a/src/virtualenv/util/lock.py
+++ b/src/virtualenv/util/lock.py
@@ -23,13 +23,16 @@ class _CountedFileLock(FileLock):
self.thread_safe = RLock()
def acquire(self, timeout=None, poll_interval=0.05):
- with self.thread_safe:
- if self.count == 0:
- super().acquire(timeout, poll_interval)
- self.count += 1
+ if not self.thread_safe.acquire(timeout=-1 if timeout is None else timeout):
+ raise Timeout(self.lock_file)
+ if self.count == 0:
+ super().acquire(timeout, poll_interval)
+ self.count += 1
def release(self, force=False):
with self.thread_safe:
+ if self.count > 0:
+ self.thread_safe.release()
if self.count == 1:
super().release(force=force)
self.count = max(self.count - 1, 0)