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

This commit is contained in:
Todd Gamblin 2015-10-27 00:35:06 -07:00
parent ead8ac58c6
commit af7b96c14a

View File

@ -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):
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):