print stack outside of watchdog interrupt. enable interrupted system call restarting.
authorForrest Voight <forrest.voight@gmail.com>
Thu, 5 Jan 2012 08:16:23 +0000 (03:16 -0500)
committerForrest Voight <forrest.voight@gmail.com>
Thu, 5 Jan 2012 08:17:36 +0000 (03:17 -0500)
fixes rphlx's bug that happens when p2pool is left stopped for more than 30 seconds

p2pool/main.py

index e0d5054..3fdfeb2 100644 (file)
@@ -666,11 +666,10 @@ def main(args, net, datadir_path):
         
         
         if hasattr(signal, 'SIGALRM'):
-            def watchdog_handler(signum, frame):
-                print 'Watchdog timer went off at:'
-                traceback.print_stack()
-            
-            signal.signal(signal.SIGALRM, watchdog_handler)
+            signal.signal(signal.SIGALRM, lambda signum, frame: reactor.callFromThread(
+                lambda: sys.stdout.write('Watchdog timer went off at:\n' + ''.join(traceback.format_stack()))
+            ))
+            signal.siginterrupt(signal.SIGALRM, False)
             task.LoopingCall(signal.alarm, 30).start(1)
         
         @defer.inlineCallbacks