Skip to content

Commit

Permalink
Merge pull request #15 from alexander-gridnev/master
Browse files Browse the repository at this point in the history
Fixed RWLock.release_read
  • Loading branch information
ajdavis committed Jan 25, 2016
2 parents d856ecf + 8e616ae commit 09b1815
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 1 deletion.
35 changes: 35 additions & 0 deletions test/test_rwlock.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ def test_acquire_release(self):
lock.release_read()
self.assertFalse(lock.locked())

def test_release_unlocked(self):
lock = toro.RWLock(max_readers=1)

with assert_raises(RuntimeError):
lock.release_read()

@gen_test
def test_acquire_contended(self):
lock = toro.RWLock(max_readers=1)
Expand Down Expand Up @@ -76,6 +82,7 @@ def test_acquire_release(self):
self.assertFalse(lock.locked())
yield lock.acquire_write()
self.assertTrue(lock.locked())
lock.release_write()
self.assertFalse(lock.locked())

@gen_test
Expand Down Expand Up @@ -351,3 +358,31 @@ def test_write_acquire_timeout(self):
duration = time.time() - st
self.assertAlmostEqual(0.1, duration, places=1)
self.assertTrue(lock.locked())

@gen_test
def test_partial_release(self):
lock = toro.RWLock(max_readers=5)
N = 5

for i in range(N):
yield lock.acquire_read()

for i in range(N):
lock.release_read()

yield lock.acquire_write()
lock.release_write()

@gen_test
def test_release_unlocked(self):
lock = toro.RWLock(max_readers=5)
N = 5

for i in range(N):
yield lock.acquire_read()

for i in range(N):
lock.release_read()

with assert_raises(RuntimeError):
lock.release_read()
2 changes: 1 addition & 1 deletion toro/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -939,7 +939,7 @@ def release_read(self):
If not locked, raise a RuntimeError.
"""
if not self.locked():
if self._block.counter == self._max_readers:
raise RuntimeError('release unlocked lock')
self._block.release()

Expand Down

0 comments on commit 09b1815

Please sign in to comment.