An update to my earlier patch, which had been just against the event queue 
put().
It occurs to me that the event queue get() poses just as much of a potential 
issue.

Please find the revised patch below.

Signed-off-by: Victor J. Orlikowski <v...@duke.edu>

diff --git a/ryu/base/app_manager.py b/ryu/base/app_manager.py
index 3d5d895..dfbd599 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.Empty:
+                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.Full:
+            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):

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


------------------------------------------------------------------------------
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to