aboutsummaryrefslogtreecommitdiff
path: root/rpkid/rpki/async.py
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2009-05-11 05:23:41 +0000
committerRob Austein <sra@hactrn.net>2009-05-11 05:23:41 +0000
commit125c61b4f7040e1206fa3eb5b627147bbbd5645b (patch)
treeab7657038e44498e226f79614e4abcdae5710057 /rpkid/rpki/async.py
parent42edf90e3796d347cdf907f59b7b0977520632fd (diff)
Pass ExitNow exceptions through, as signal handlers can raise them at any time.
svn path=/rpkid/irdbd.py; revision=2423
Diffstat (limited to 'rpkid/rpki/async.py')
-rw-r--r--rpkid/rpki/async.py12
1 files changed, 8 insertions, 4 deletions
diff --git a/rpkid/rpki/async.py b/rpkid/rpki/async.py
index c81bb474..cb2541b0 100644
--- a/rpkid/rpki/async.py
+++ b/rpkid/rpki/async.py
@@ -21,6 +21,8 @@ PERFORMANCE OF THIS SOFTWARE.
import asyncore, signal, traceback
import rpki.log, rpki.sundial
+ExitNow = asyncore.ExitNow
+
class iterator(object):
"""Iteration construct for event-driven code. Takes three
arguments:
@@ -44,6 +46,8 @@ class iterator(object):
self.done_callback = done_callback
try:
self.iterator = iter(iterable)
+ except ExitNow:
+ raise
except:
rpki.log.debug("Problem constructing iterator for %s" % repr(iterable))
raise
@@ -146,7 +150,7 @@ class timer(object):
t = cls.queue.pop(0)
try:
t.handler()
- except asyncore.ExitNow:
+ except ExitNow:
raise
except Exception, e:
t.errback(e)
@@ -186,7 +190,7 @@ class timer(object):
def _raiseExitNow(signum, frame):
"""Signal handler for event_loop()."""
- raise asyncore.ExitNow
+ raise ExitNow
def event_loop(catch_signals = (signal.SIGINT, signal.SIGTERM)):
"""Replacement for asyncore.loop(), adding timer and signal support."""
@@ -197,7 +201,7 @@ def event_loop(catch_signals = (signal.SIGINT, signal.SIGTERM)):
while asyncore.socket_map or timer.queue:
asyncore.poll(timer.seconds_until_wakeup(), asyncore.socket_map)
timer.runq()
- except asyncore.ExitNow:
+ except ExitNow:
pass
finally:
for sig in old_signal_handlers:
@@ -205,4 +209,4 @@ def event_loop(catch_signals = (signal.SIGINT, signal.SIGTERM)):
def exit_event_loop():
"""Force exit from event_loop()."""
- raise asyncore.ExitNow
+ raise ExitNow