Author: Armin Rigo <[email protected]>
Branch: 
Changeset: r61283:15f640136dbf
Date: 2013-02-15 19:41 +0100
http://bitbucket.org/pypy/pypy/changeset/15f640136dbf/

Log:    Uh, thread+signal+fork. Tons of fun.

diff --git a/pypy/module/thread/threadlocals.py 
b/pypy/module/thread/threadlocals.py
--- a/pypy/module/thread/threadlocals.py
+++ b/pypy/module/thread/threadlocals.py
@@ -77,5 +77,13 @@
 
     def reinit_threads(self, space):
         "Called in the child process after a fork()"
+        # clear the _signalsenabled dictionary for all other threads
+        # (which are now dead); and for the current thread, force an
+        # enable_signals() if necessary.  That's a hack but I cannot
+        # figure out a non-hackish way to handle thread+signal+fork :-(
+        ident = rthread.get_ident()
+        old = self._signalsenabled.get(ident, 0)
         self._signalsenabled.clear()
-        self.enable_signals()
+        if old == 0:
+            old = 1
+        self._signalsenabled[ident] = old
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to