From 7f7762035433a0ae2b53a968a77bf301d9b903b9 Mon Sep 17 00:00:00 2001 From: Geoff Salmon Date: Thu, 27 Dec 2012 12:52:04 -0500 Subject: [PATCH] zmq: avoid spurious wakeups by forcing zmq events to be processed when no threads waiting --- eventlet/green/zmq.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/eventlet/green/zmq.py b/eventlet/green/zmq.py index e424c56..05ad376 100644 --- a/eventlet/green/zmq.py +++ b/eventlet/green/zmq.py @@ -205,8 +205,13 @@ class Socket(_Socket): # Some events arrived at the zmq socket. This may mean # there's a message that can be read or there's space for # a message to be written. - self._eventlet_send_event.wake() - self._eventlet_recv_event.wake() + send_wake = self._eventlet_send_event.wake() + recv_wake = self._eventlet_recv_event.wake() + if not send_wake and not recv_wake: + # if no waiting send or recv thread was woken up, then + # force the zmq socket's events to be processed to + # avoid repeated wakeups + _Socket_getsockopt(self, EVENTS) hub = hubs.get_hub() self._eventlet_listener = hub.add(hub.READ, self.getsockopt(FD), event)