diff options
author | Guido van Rossum <guido@dropbox.com> | 2013-11-21 19:07:45 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@dropbox.com> | 2013-11-21 19:07:45 (GMT) |
commit | 9c55a58a1d7f664e7d236ef690d17409841632c4 (patch) | |
tree | 6c8ad2caefedc542eaebed256d83eec2a5dde545 | |
parent | d88c6f9b9bae5aecdcedecf9185aff9a31bf6c4f (diff) | |
download | cpython-9c55a58a1d7f664e7d236ef690d17409841632c4.zip cpython-9c55a58a1d7f664e7d236ef690d17409841632c4.tar.gz cpython-9c55a58a1d7f664e7d236ef690d17409841632c4.tar.bz2 |
asyncio: Make Semaphore(0) work properly.
-rw-r--r-- | Lib/asyncio/locks.py | 4 | ||||
-rw-r--r-- | Lib/test/test_asyncio/test_locks.py | 4 |
2 files changed, 6 insertions, 2 deletions
diff --git a/Lib/asyncio/locks.py b/Lib/asyncio/locks.py index ac851e5..dd9f0f8 100644 --- a/Lib/asyncio/locks.py +++ b/Lib/asyncio/locks.py @@ -348,12 +348,12 @@ class Semaphore: def __init__(self, value=1, bound=False, *, loop=None): if value < 0: - raise ValueError("Semaphore initial value must be > 0") + raise ValueError("Semaphore initial value must be >= 0") self._value = value self._bound = bound self._bound_value = value self._waiters = collections.deque() - self._locked = False + self._locked = (value == 0) if loop is not None: self._loop = loop else: diff --git a/Lib/test/test_asyncio/test_locks.py b/Lib/test/test_asyncio/test_locks.py index 19ef877..539c5c3 100644 --- a/Lib/test/test_asyncio/test_locks.py +++ b/Lib/test/test_asyncio/test_locks.py @@ -684,6 +684,10 @@ class SemaphoreTests(unittest.TestCase): finally: events.set_event_loop(None) + def test_initial_value_zero(self): + sem = locks.Semaphore(0, loop=self.loop) + self.assertTrue(sem.locked()) + def test_repr(self): sem = locks.Semaphore(loop=self.loop) self.assertTrue(repr(sem).endswith('[unlocked,value:1]>')) |