From 2e113852e51e45af3551054e0dcc674caa8204cf Mon Sep 17 00:00:00 2001 From: donovan Date: Mon, 6 Oct 2008 16:46:11 -0700 Subject: [PATCH 1/6] Simple patch to make the libev callback signature match. Patch by grugq --- eventlet/hubs/libev.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/eventlet/hubs/libev.py b/eventlet/hubs/libev.py index 9899336..e1db18b 100644 --- a/eventlet/hubs/libev.py +++ b/eventlet/hubs/libev.py @@ -51,13 +51,17 @@ class Hub(hub.BaseHub): sig.start() def add_descriptor(self, fileno, read=None, write=None, exc=None): + def do_cb(watcher, event): + func, fileno = watcher.data + func(fileno) + if read: - evt = libev.Io(fileno, libev.EV_READ, self._evloop, read, fileno) + evt = libev.Io(fileno, libev.EV_READ, self._evloop, do_cb, (read, fileno)) evt.start() self.readers[fileno] = evt, read if write: - evt = libev.Io(fileno, libev.EV_WRITE, self._evloop, write, fileno) + evt = libev.Io(fileno, libev.EV_WRITE, self._evloop, do_cb, (write, fileno)) evt.start() self.writers[fileno] = evt, write From 5aac2e7ae4b319b3f5d7131841dfd14f906737a6 Mon Sep 17 00:00:00 2001 From: donovan Date: Mon, 6 Oct 2008 16:48:12 -0700 Subject: [PATCH 2/6] Add a backlog argument to tcp_listener. Patch by grugq --- eventlet/api.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eventlet/api.py b/eventlet/api.py index 8c2b0d4..7c0463d 100644 --- a/eventlet/api.py +++ b/eventlet/api.py @@ -67,7 +67,7 @@ class TimeoutError(Exception): _threadlocal = tls.local() -def tcp_listener(address): +def tcp_listener(address, backlog=50): """ Listen on the given (ip, port) *address* with a TCP socket. Returns a socket object on which one should call ``accept()`` to @@ -79,7 +79,7 @@ def tcp_listener(address): """ from eventlet import greenio, util socket = greenio.GreenSocket(util.tcp_socket()) - util.socket_bind_and_listen(socket, address) + util.socket_bind_and_listen(socket, address, backlog=backlog) return socket def ssl_listener(address, certificate, private_key): From 91ffe1f127745cd01f874e7b56778075d681c69c Mon Sep 17 00:00:00 2001 From: donovan Date: Mon, 6 Oct 2008 16:48:34 -0700 Subject: [PATCH 3/6] Handle KeyError from poll.unregister --- eventlet/hubs/poll.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/eventlet/hubs/poll.py b/eventlet/hubs/poll.py index 795cda8..76d449a 100644 --- a/eventlet/hubs/poll.py +++ b/eventlet/hubs/poll.py @@ -63,7 +63,10 @@ class Hub(hub.BaseHub): def remove_descriptor(self, fileno): super(Hub, self).remove_descriptor(fileno) - self.poll.unregister(fileno) + try: + self.poll.unregister(fileno) + except KeyError: + pass def wait(self, seconds=None): readers = self.readers From 3a4994401c7e13b97143f5b3c87e76ef9ab7535f Mon Sep 17 00:00:00 2001 From: donovan Date: Mon, 13 Oct 2008 10:36:30 -0700 Subject: [PATCH 4/6] Prepare for 0.8 --- NEWS | 10 ++++++++++ setup.py | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 86efb0c..2eb2304 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,15 @@ +0.8.x +===== + +Fix a CPU leak that would cause the poll hub to consume 100% CPU in certain conditions, for example the echoserver example. (Donovan Preston) + +Fix the libev hub to match libev's callback signature. (Patch by grugq) + +Add a backlog argument to api.tcp_listener (Patch by grugq) + 0.7.x ===== + Fix a major memory leak when using the libevent or libev hubs. Timers were not being removed from the hub after they fired. (Thanks Agusto Becciu and the grugq). Also, make it possible to call wrap_socket_with_coroutine_socket without using the threadpool to make dns operations non-blocking (Thanks the grugq). It's now possible to use eventlet's SSL client to talk to eventlet's SSL server. (Thanks to Ryan Williams) diff --git a/setup.py b/setup.py index 27360e4..c3d48a7 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ from setuptools import find_packages, setup setup( name='eventlet', - version='0.8pre', + version='0.8', description='Coroutine-based networking library', author='Linden Lab', author_email='eventletdev@lists.secondlife.com', From 3382938649045c938f10c20c6d7bba37c31f5c1e Mon Sep 17 00:00:00 2001 From: donovan Date: Mon, 13 Oct 2008 10:38:50 -0700 Subject: [PATCH 6/6] 0.8 is out, on to 0.9pre --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index c3d48a7..be4e774 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ from setuptools import find_packages, setup setup( name='eventlet', - version='0.8', + version='0.9pre', description='Coroutine-based networking library', author='Linden Lab', author_email='eventletdev@lists.secondlife.com',