python/ovs/poller.py: workaround an eventlet bug
authorYAMAMOTO Takashi <yamamoto@valinux.co.jp>
Tue, 16 Apr 2013 06:56:31 +0000 (15:56 +0900)
committerBen Pfaff <blp@nicira.com>
Tue, 16 Apr 2013 16:17:19 +0000 (09:17 -0700)
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
Signed-off-by: Ben Pfaff <blp@nicira.com>
python/ovs/poller.py

index c04c9b3..db615c9 100644 (file)
@@ -18,6 +18,15 @@ import ovs.vlog
 import select
 import socket
 
+try:
+    import eventlet.patcher
+
+    def _using_eventlet_green_select():
+        return eventlet.patcher.is_monkey_patched(select)
+except:
+    def _using_eventlet_green_select():
+        return False
+
 vlog = ovs.vlog.Vlog("poller")
 
 
@@ -54,6 +63,10 @@ class _SelectSelect(object):
             timeout = None
         else:
             timeout = float(timeout) / 1000
+        # XXX workaround a bug in eventlet
+        # see https://github.com/eventlet/eventlet/pull/25
+        if timeout == 0 and _using_eventlet_green_select():
+            timeout = 0.1
 
         rlist, wlist, xlist = select.select(self.rlist, self.wlist, self.xlist,
                                             timeout)