<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(&quot;%s.__bootstrap(): thread started&quot;, self)</pre><pre> </pre><pre><font face="arial,helvetica,sans-serif">I also posted this patch to the python &quot;Asking For Help Wiki&quot; 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 &quot;unhandled exception threading&quot;.  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>