Commit 91b0c004 authored by Guido van Rossum's avatar Guido van Rossum

asyncio: Make Semaphore(0) work properly.

parent 7b65962e
...@@ -348,12 +348,12 @@ class Semaphore: ...@@ -348,12 +348,12 @@ class Semaphore:
def __init__(self, value=1, bound=False, *, loop=None): def __init__(self, value=1, bound=False, *, loop=None):
if value < 0: if value < 0:
raise ValueError("Semaphore initial value must be > 0") raise ValueError("Semaphore initial value must be >= 0")
self._value = value self._value = value
self._bound = bound self._bound = bound
self._bound_value = value self._bound_value = value
self._waiters = collections.deque() self._waiters = collections.deque()
self._locked = False self._locked = (value == 0)
if loop is not None: if loop is not None:
self._loop = loop self._loop = loop
else: else:
......
...@@ -684,6 +684,10 @@ class SemaphoreTests(unittest.TestCase): ...@@ -684,6 +684,10 @@ class SemaphoreTests(unittest.TestCase):
finally: finally:
events.set_event_loop(None) 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): def test_repr(self):
sem = locks.Semaphore(loop=self.loop) sem = locks.Semaphore(loop=self.loop)
self.assertTrue(repr(sem).endswith('[unlocked,value:1]>')) self.assertTrue(repr(sem).endswith('[unlocked,value:1]>'))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment