Empty send_q.get() is blocking send thread.
Because of this issue, datapath state never transit to DEAD.

This fixes commit 83e3709a0d70f889e794d1c5f70c1c1eb73075f7.
  - controller: fix send_q draining
    https://github.com/osrg/ryu/commit/83e3709a0d70f889e794d1c5f70c1c1eb73075f7

Signed-off-by: YAMADA Hideki <[email protected]>
---
 ryu/controller/controller.py |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/ryu/controller/controller.py b/ryu/controller/controller.py
index 9dc745a..59286ff 100644
--- a/ryu/controller/controller.py
+++ b/ryu/controller/controller.py
@@ -24,6 +24,7 @@ import greenlet
 import ssl
 from gevent.server import StreamServer
 from gevent.queue import Queue
+from Queue import Empty
 
 import ryu.base.app_manager
 
@@ -198,7 +199,11 @@ class Datapath(object):
         finally:
             q = self.send_q
             self.send_q = None
-            while q.get():
+            try:
+                while q.get_nowait():
+                    pass
+            except Empty:
+                #LOG.debug('DP(id=%s): send_q was cleared', self.id)
                 pass
 
     def send(self, buf):
-- 
1.7.1



------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to