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