Skip to content
Snippets Groups Projects
Commit af7b96c1 authored by Todd Gamblin's avatar Todd Gamblin
Browse files

Lock acquires return True/False depending on whether they got POSIX lock.

parent ead8ac58
No related branches found
No related tags found
No related merge requests found
...@@ -95,10 +95,15 @@ def acquire_read(self, timeout=_default_timeout): ...@@ -95,10 +95,15 @@ def acquire_read(self, timeout=_default_timeout):
order, but the POSIX lock is held until all local read and order, but the POSIX lock is held until all local read and
write locks are released. write locks are released.
Returns True if it is the first acquire and actually acquires
the POSIX lock, False if it is a nested transaction.
""" """
if self._reads == 0 and self._writes == 0:
self._lock(fcntl.LOCK_SH, timeout)
self._reads += 1 self._reads += 1
if self._reads == 1 and self._writes == 0:
self._lock(fcntl.LOCK_SH, timeout)
return True
return False
def acquire_write(self, timeout=_default_timeout): def acquire_write(self, timeout=_default_timeout):
...@@ -107,10 +112,16 @@ def acquire_write(self, timeout=_default_timeout): ...@@ -107,10 +112,16 @@ def acquire_write(self, timeout=_default_timeout):
Read and write locks can be acquired and released in arbitrary Read and write locks can be acquired and released in arbitrary
order, but the POSIX lock is held until all local read and order, but the POSIX lock is held until all local read and
write locks are released. write locks are released.
Returns True if it is the first acquire and actually acquires
the POSIX lock, False if it is a nested transaction.
""" """
if self._writes == 0:
self._lock(fcntl.LOCK_EX, timeout)
self._writes += 1 self._writes += 1
if self._writes == 1:
self._lock(fcntl.LOCK_EX, timeout)
return True
return False
def release_read(self): def release_read(self):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment