aboutsummaryrefslogtreecommitdiff
path: root/rpkid/rpki/async.py
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2009-12-02 07:02:08 +0000
committerRob Austein <sra@hactrn.net>2009-12-02 07:02:08 +0000
commit73add9ba67ec25d5a4c73f9d048db72c6ba57e3d (patch)
tree1680b26dc18fef4446059559e274c0bf7776c675 /rpkid/rpki/async.py
parentc4c506e855a6ab2d85fde2754cbffa448bf42152 (diff)
sync_wrapper wasn't working quite right with defer().
svn path=/rpkid/rpki/async.py; revision=2890
Diffstat (limited to 'rpkid/rpki/async.py')
-rw-r--r--rpkid/rpki/async.py16
1 files changed, 13 insertions, 3 deletions
diff --git a/rpkid/rpki/async.py b/rpkid/rpki/async.py
index de469696..d8e12dd7 100644
--- a/rpkid/rpki/async.py
+++ b/rpkid/rpki/async.py
@@ -282,10 +282,10 @@ def event_loop(catch_signals = (signal.SIGINT, signal.SIGTERM)):
if timer.gc_debug:
import gc
while asyncore.socket_map or deferred_queue or timer.queue:
+ run_deferred()
asyncore.poll(timer.seconds_until_wakeup(), asyncore.socket_map)
run_deferred()
timer.runq()
- run_deferred()
if timer.gc_debug:
gc.collect()
if gc.garbage:
@@ -325,11 +325,21 @@ class sync_wrapper(object):
raise ExitNow
def __call__(self, *args, **kwargs):
- timer(lambda: self.func(self.cb, self.eb, *args, **kwargs), self.eb).set(None)
+
+ def thunk():
+ try:
+ self.func(self.cb, self.eb, *args, **kwargs)
+ except ExitNow:
+ raise
+ except Exception, e:
+ self.eb(e)
+
+ defer(thunk)
event_loop()
if self.err is not None:
raise self.err
- return self.res
+ else:
+ return self.res
def exit_event_loop():
"""Force exit from event_loop()."""