diff options
author | Rob Austein <sra@hactrn.net> | 2009-12-02 07:02:08 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2009-12-02 07:02:08 +0000 |
commit | 73add9ba67ec25d5a4c73f9d048db72c6ba57e3d (patch) | |
tree | 1680b26dc18fef4446059559e274c0bf7776c675 /rpkid/rpki/async.py | |
parent | c4c506e855a6ab2d85fde2754cbffa448bf42152 (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.py | 16 |
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().""" |