aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimo Ewalds <timo@ewalds.ca>2019-03-05 15:36:39 +0000
committerGregory P. Smith <greg@krypto.org>2019-03-05 07:36:39 -0800
commit233f6b01d456bf355f7b283525c68475560a3ba1 (patch)
tree50e3e8fab1c74963a958959934ef3e5d284045c6
parent58f5beb1275c6424802c59a169eb09d479d79818 (diff)
downloadportpicker-233f6b01d456bf355f7b283525c68475560a3ba1.tar.gz
Handle a rare race condition with reserved ports. (#14)
-rw-r--r--src/portpicker.py5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/portpicker.py b/src/portpicker.py
index 7636733..e54dcbc 100644
--- a/src/portpicker.py
+++ b/src/portpicker.py
@@ -158,8 +158,11 @@ def pick_unused_port(pid=None, portserver_address=None):
Raises:
NoFreePortFoundError: No free port could be found.
"""
- if _free_ports:
+ try: # Instead of `if _free_ports:` to handle the race condition.
port = _free_ports.pop()
+ except KeyError:
+ pass
+ else:
_owned_ports.add(port)
return port
# Provide access to the portserver on an opt-in basis.