X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=e2reactor.py;h=cca2f358eeb5632b98f9c11deb4d0802a69481be;hp=1ecd40e836812ca40309192c3894ea7420d6b61d;hb=26ffb5f9f32d3939c8f4bb6601bfed424bd13a14;hpb=2c10049e10195f88b1eefec26f70f5019d316cc8 diff --git a/e2reactor.py b/e2reactor.py index 1ecd40e..cca2f35 100644 --- a/e2reactor.py +++ b/e2reactor.py @@ -11,7 +11,7 @@ Maintainer: U{Felix Domke} import select, errno, sys # Twisted imports -from twisted.python import log, threadable, failure +from twisted.python import log, failure from twisted.internet import main, posixbase, error #from twisted.internet.pollreactor import PollReactor, poller @@ -27,6 +27,7 @@ POLL_DISCONNECTED = (select.POLLHUP | select.POLLERR | select.POLLNVAL) class E2SharedPoll: def __init__(self): self.dict = { } + self.eApp = getApplication() def register(self, fd, eventmask = select.POLLIN | select.POLLERR | select.POLLOUT): self.dict[fd] = eventmask @@ -35,7 +36,11 @@ class E2SharedPoll: del self.dict[fd] def poll(self, timeout = None): - return getApplication().poll(timeout, self.dict) + try: + r = self.eApp.poll(timeout, self.dict) + except KeyboardInterrupt: + return None + return r poller = E2SharedPoll() @@ -56,6 +61,9 @@ class PollReactor(posixbase.PosixReactorBase): poller.register(fd, mask) else: if selectables.has_key(fd): del selectables[fd] + + + poller.eApp.interruptPoll() def _dictRemove(self, selectable, mdict): try: @@ -131,6 +139,7 @@ class PollReactor(posixbase.PosixReactorBase): POLLIN=select.POLLIN, POLLOUT=select.POLLOUT): """Poll the poller for new events.""" + if timeout is not None: timeout = int(timeout * 1000) # convert seconds to milliseconds @@ -183,6 +192,9 @@ class PollReactor(posixbase.PosixReactorBase): if why: self._disconnectSelectable(selectable, why, inRead) + def callLater(self, *args, **kwargs): + poller.eApp.interruptPoll() + return posixbase.PosixReactorBase.callLater(self, *args, **kwargs) def install(): """Install the poll() reactor."""