libevent hub: do not store callback itself in readers and writers, libevent's event is enough

This commit is contained in:
Denis Bilenko
2009-06-24 14:05:54 +07:00
parent 7711c86adb
commit 1cfa169339

View File

@@ -122,11 +122,11 @@ class Hub(object):
def add_descriptor(self, fileno, read=None, write=None, exc=None): def add_descriptor(self, fileno, read=None, write=None, exc=None):
if read: if read:
evt = event.read(fileno, read, fileno) evt = event.read(fileno, read, fileno)
self.readers[fileno] = evt, read self.readers[fileno] = evt
if write: if write:
evt = event.write(fileno, write, fileno) evt = event.write(fileno, write, fileno)
self.writers[fileno] = evt, write self.writers[fileno] = evt
if exc: if exc:
self.excs[fileno] = exc self.excs[fileno] = exc
@@ -143,10 +143,18 @@ class Hub(object):
return event_wrapper(event.signal(signalnum, wrapper)) return event_wrapper(event.signal(signalnum, wrapper))
def remove_descriptor(self, fileno): def remove_descriptor(self, fileno):
for queue in (self.readers, self.writers): reader = self.readers.pop(fileno, None)
tpl = queue.pop(fileno, None) if reader is not None:
if tpl is not None: try:
tpl[0].delete() reader.delete()
except:
traceback.print_exc()
writer = self.writers.pop(fileno, None)
if writer is not None:
try:
writer.delete()
except:
traceback.print_exc()
self.excs.pop(fileno, None) self.excs.pop(fileno, None)
def schedule_call_local(self, seconds, cb, *args, **kwargs): def schedule_call_local(self, seconds, cb, *args, **kwargs):