summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/asyncio/locks.py4
-rw-r--r--Lib/test/test_asyncio/test_locks.py4
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]>'))