]> granicus.if.org Git - python/commitdiff
#11866: Eliminate race condition in the computation of names for new threads.
authorR David Murray <rdmurray@bitdance.com>
Sat, 4 Oct 2014 21:43:54 +0000 (17:43 -0400)
committerR David Murray <rdmurray@bitdance.com>
Sat, 4 Oct 2014 21:43:54 +0000 (17:43 -0400)
Original patch by Peter Saveliev.

Lib/threading.py
Misc/NEWS

index 7a5a4408ce9cff3e083a3558ef39314002d1db65..37aa3b8ddc04111cdc255fa9cba9edeafef7c284 100644 (file)
@@ -9,7 +9,7 @@ except ImportError:
     from time import time as _time
 from traceback import format_exc as _format_exc
 from _weakrefset import WeakSet
-from itertools import islice as _islice
+from itertools import islice as _islice, count as _count
 try:
     from _collections import deque as _deque
 except ImportError:
@@ -726,11 +726,10 @@ class BrokenBarrierError(RuntimeError):
 
 
 # Helper to generate new thread names
-_counter = 0
+_counter = _count().__next__
+_counter() # Consume 0 so first non-main thread has id 1.
 def _newname(template="Thread-%d"):
-    global _counter
-    _counter += 1
-    return template % _counter
+    return template % _counter()
 
 # Active thread administration
 _active_limbo_lock = _allocate_lock()
index 6112a008e9eddb17cabf8cd5c457dd4c544b17dc..d0593c24f9dac36189f69e78da347b0a8d1828df 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -22,6 +22,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #11866: Eliminated race condition in the computation of names
+  for new threads.
+
 - Issue #21905: Avoid RuntimeError in pickle.whichmodule() when sys.modules
   is mutated while iterating.  Patch by Olivier Grisel.