Allow arbitrary timeout in Condition.wait (rhbz#917709).
This commit is contained in:
parent
8cbd1db2b1
commit
383dbe37b6
|
@ -0,0 +1,70 @@
|
|||
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"
|
||||
|
||||
|
14
python.spec
14
python.spec
|
@ -106,7 +106,7 @@ Summary: An interpreted, interactive, object-oriented programming language
|
|||
Name: %{python}
|
||||
# Remember to also rebase python-docs when changing this:
|
||||
Version: 2.7.4
|
||||
Release: 2%{?dist}
|
||||
Release: 3%{?dist}
|
||||
License: Python
|
||||
Group: Development/Languages
|
||||
Requires: %{python}-libs%{?_isa} = %{version}-%{release}
|
||||
|
@ -779,6 +779,14 @@ Patch174: 00174-fix-for-usr-move.patch
|
|||
# (rhbz#927358)
|
||||
Patch175: 00175-fix-configure-Wformat.patch
|
||||
|
||||
# 00176 #
|
||||
# Allow arbitrary timeout for Condition.wait, as reported in
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=917709
|
||||
# Upstream doesn't want this: http://bugs.python.org/issue17748
|
||||
# But we have no better solution downstream yet, and since there is
|
||||
# no API breakage, we apply this patch.
|
||||
# Doesn't apply to Python 3, where this is fixed otherwise and works.
|
||||
Patch176: 00176-allow-arbitrary-timeout-in-condition-wait.patch
|
||||
|
||||
# (New patches go here ^^^)
|
||||
#
|
||||
|
@ -1119,6 +1127,7 @@ mv Modules/cryptmodule.c Modules/_cryptmodule.c
|
|||
%patch173 -p1
|
||||
%patch174 -p1 -b .fix-for-usr-move
|
||||
%patch175 -p1 -b .fix-configure-Wformat
|
||||
%patch176 -p1
|
||||
|
||||
|
||||
# This shouldn't be necesarry, but is right now (2.2a3)
|
||||
|
@ -1951,6 +1960,9 @@ rm -fr %{buildroot}
|
|||
# ======================================================
|
||||
|
||||
%changelog
|
||||
* Mon Apr 22 2013 Bohuslav Kabrda <bkabrda@redhat.com> - 2.7.4-3
|
||||
- Allow arbitrary timeout in Condition.wait (rhbz#917709).
|
||||
|
||||
* Thu Apr 11 2013 Kalev Lember <kalevlember@gmail.com> - 2.7.4-2
|
||||
- Build with libdb 5.3 instead of libdb4
|
||||
- Refreshed patches: 0 (config), 102 (lib64)
|
||||
|
|
Loading…
Reference in New Issue