@@ -216,10 +216,11 @@ class ReaderWriterLock(object):
|
||||
a lock.
|
||||
"""
|
||||
me = self._current_thread()
|
||||
if self.is_reader():
|
||||
i_am_writer = self.is_writer(check_pending=False)
|
||||
if self.is_reader() and not i_am_writer:
|
||||
raise RuntimeError("Reader %s to writer privilege"
|
||||
" escalation not allowed" % me)
|
||||
if self.is_writer(check_pending=False):
|
||||
if i_am_writer:
|
||||
# Already the writer; this allows for basic reentrancy.
|
||||
yield self
|
||||
else:
|
||||
|
||||
@@ -315,6 +315,15 @@ class ReadWriteLockTest(test.TestCase):
|
||||
self.assertEqual(5, len(writers))
|
||||
self.assertEqual(10, len(readers))
|
||||
|
||||
def test_writer_reader_writer(self):
|
||||
lock = fasteners.ReaderWriterLock()
|
||||
with lock.write_lock():
|
||||
self.assertTrue(lock.is_writer())
|
||||
with lock.read_lock():
|
||||
self.assertTrue(lock.is_reader())
|
||||
with lock.write_lock():
|
||||
self.assertTrue(lock.is_writer())
|
||||
|
||||
def test_single_reader_writer(self):
|
||||
results = []
|
||||
lock = fasteners.ReaderWriterLock()
|
||||
|
||||
Reference in New Issue
Block a user