<div>Coders,</div>
<div> </div>
<div>I wrote this patch for threading.py which corrects an unhandled exception problem I ran up against.</div>
<div> </div>
<div><pre><span id="line-1-1" class="anchor"></span>--- threading27.py Mon Apr 05 20:23:34 2010
<span id="line-2-1" class="anchor"></span>+++ threadingmod27.py Tue Mar 29 10:16:59 2011
<span id="line-3-1" class="anchor"></span>@@ -439,6 +439,7 @@
<span id="line-4-1" class="anchor"></span> self.__stopped = False
<span id="line-5-1" class="anchor"></span> self.__block = Condition(Lock())
<span id="line-6-1" class="anchor"></span> self.__initialized = True
<span id="line-7-1" class="anchor"></span>+ self.isSelfInLimbo = True
<span id="line-8" class="anchor"></span> # sys.stderr is not stored in the class like
<span id="line-9" class="anchor"></span> # sys.exc_info since it can be changed between instances
<span id="line-10" class="anchor"></span> self.__stderr = _sys.stderr
<span id="line-11" class="anchor"></span>@@ -484,7 +485,9 @@
<span id="line-12" class="anchor"></span> finally:
<span id="line-13" class="anchor"></span> # Avoid a refcycle if the thread is running a function with
<span id="line-14" class="anchor"></span> # an argument that has a member that points to the thread.
<span id="line-15" class="anchor"></span>- del self.__target, self.__args, self.__kwargs
<span id="line-16" class="anchor"></span>+ if not self.isSelfInLimbo:
<span id="line-17" class="anchor"></span>+ self.isSelfInLimbo = True
<span id="line-18" class="anchor"></span>+ del self.__target, self.__args, self.__kwargs
<span id="line-19" class="anchor"></span>
<span id="line-20" class="anchor"></span> def __bootstrap(self):
<span id="line-21" class="anchor"></span> # Wrapper around the real bootstrap code that ignores
<span id="line-22" class="anchor"></span>@@ -515,7 +518,10 @@
<span id="line-23" class="anchor"></span> self.__started.set()
<span id="line-24" class="anchor"></span> with _active_limbo_lock:
<span id="line-25" class="anchor"></span> _active[self.__ident] = self
<span id="line-26" class="anchor"></span>- del _limbo[self]
<span id="line-27" class="anchor"></span>+ if self in _limbo:
<span id="line-28" class="anchor"></span>+ del _limbo[self]
<span id="line-29" class="anchor"></span>+ else:
<span id="line-30" class="anchor"></span>+ self.isSelfInLimbo = False
<span id="line-31" class="anchor"></span> if __debug__:
<span id="line-32" class="anchor"></span> self._note("%s.__bootstrap(): thread started", self)</pre><pre> </pre><pre><font face="arial,helvetica,sans-serif">I also posted this patch to the python "Asking For Help Wiki" at <a href="http://wiki.python.org">wiki.python.org</a>.</font></pre>
<pre><font face="arial,helvetica,sans-serif">You can find it by searching for title "unhandled exception threading". This may not be </font></pre><pre><font face="arial,helvetica,sans-serif">the very best solution for the problem, but I believe some correction is </font><font face="arial,helvetica,sans-serif">in order.</font></pre>
<pre>Sincrely,</pre><pre>Jeff Jacobs</pre></div>