Sigh. One more update to my earlier patch.
Realized I needed to expose the Full and Empty conditions from the hub.
Also realized (such shame!) that the Full and Empty conditions are in 
eventlet.queue.

Please find the revised patch below.

Signed-off-by: Victor J. Orlikowski <[email protected]>

diff --git a/ryu/base/app_manager.py b/ryu/base/app_manager.py
index 3d5d895..8c733b2 100644
--- a/ryu/base/app_manager.py
+++ b/ryu/base/app_manager.py
@@ -279,15 +279,23 @@ class RyuApp(object):
 
     def _event_loop(self):
         while self.is_active or not self.events.empty():
-            ev, state = self.events.get()
-            if ev == self._event_stop:
+            ev = state = None
+            try:
+                ev, state = self.events.get(timeout=5)
+            except hub.QueueEmpty:
+                continue
+            if (ev is None) or (ev == self._event_stop):
                 continue
             handlers = self.get_handlers(ev, state)
             for handler in handlers:
                 handler(ev)
 
     def _send_event(self, ev, state):
-        self.events.put((ev, state))
+        try:
+            self.events.put((ev, state), timeout=5)
+        except hub.QueueFull:
+            LOG.debug("EVENT LOST FOR %s %s",
+                      self.name, ev.__class__.__name__)
 
     def send_event(self, name, ev, state=None):
         """
@@ -520,7 +528,7 @@ class AppManager(object):
         self._close(app)
         events = app.events
         if not events.empty():
-            app.logger.debug('%s events remians %d', app.name, events.qsize())
+            app.logger.debug('%s events remains %d', app.name, events.qsize())
 
     def close(self):
         def close_all(close_dict):
diff --git a/ryu/lib/hub.py b/ryu/lib/hub.py
index 5621147..954bfc8 100644
--- a/ryu/lib/hub.py
+++ b/ryu/lib/hub.py
@@ -91,6 +91,7 @@ if HUB_TYPE == 'eventlet':
                 pass
 
     Queue = eventlet.queue.Queue
+    QueueFull = eventlet.queue.Full
     QueueEmpty = eventlet.queue.Empty
     Semaphore = eventlet.semaphore.Semaphore
     BoundedSemaphore = eventlet.semaphore.BoundedSemaphore


Best,
Victor
--
Victor J. Orlikowski <> vjo@[cs.]duke.edu


------------------------------------------------------------------------------
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to