--- /dev/null
+diff --git a/Lib/threading.py b/Lib/threading.py
+index cb49c4a..c9795a5 100644
+--- a/Lib/threading.py
++++ b/Lib/threading.py
+@@ -305,7 +305,7 @@ class _Condition(_Verbose):
+ else:
+ return True
+
+- def wait(self, timeout=None):
++ def wait(self, timeout=None, balancing=True):
+ """Wait until notified or until a timeout occurs.
+
+ If the calling thread has not acquired the lock when this method is
+@@ -354,7 +354,10 @@ class _Condition(_Verbose):
+ remaining = endtime - _time()
+ if remaining <= 0:
+ break
+- delay = min(delay * 2, remaining, .05)
++ if balancing:
++ delay = min(delay * 2, remaining, 0.05)
++ else:
++ delay = remaining
+ _sleep(delay)
+ if not gotit:
+ if __debug__:
+@@ -599,7 +602,7 @@ class _Event(_Verbose):
+ finally:
+ self.__cond.release()
+
+- def wait(self, timeout=None):
++ def wait(self, timeout=None, balancing=True):
+ """Block until the internal flag is true.
+
+ If the internal flag is true on entry, return immediately. Otherwise,
+@@ -617,7 +620,7 @@ class _Event(_Verbose):
+ self.__cond.acquire()
+ try:
+ if not self.__flag:
+- self.__cond.wait(timeout)
++ self.__cond.wait(timeout, balancing)
+ return self.__flag
+ finally:
+ self.__cond.release()
+@@ -908,7 +911,7 @@ class Thread(_Verbose):
+ if 'dummy_threading' not in _sys.modules:
+ raise
+
+- def join(self, timeout=None):
++ def join(self, timeout=None, balancing=True):
+ """Wait until the thread terminates.
+
+ This blocks the calling thread until the thread whose join() method is
+@@ -957,7 +960,7 @@ class Thread(_Verbose):
+ if __debug__:
+ self._note("%s.join(): timed out", self)
+ break
+- self.__block.wait(delay)
++ self.__block.wait(delay, balancing)
+ else:
+ if __debug__:
+ self._note("%s.join(): thread stopped", self)
+@@ -1143,7 +1146,7 @@ class _DummyThread(Thread):
+ def _set_daemon(self):
+ return True
+
+- def join(self, timeout=None):
++ def join(self, timeout=None, balancing=True):
+ assert False, "cannot join a dummy thread"
+
+