hi, (2013/02/21 16:17), YAMAMOTO Takashi wrote: > hi, > >> Empty send_q.get() is blocking send thread. >> Because of this issue, datapath state never transit to DEAD. > > oops, sorry. > probably it's better to just leave it for gc? > I think so, too. How about following?
From 08126332a9d3d59af8e441ecfe78482a90515771 Mon Sep 17 00:00:00 2001 From: YAMADA Hideki <[email protected]> Date: Thu, 21 Feb 2013 16:33:47 +0900 Subject: [PATCH] controller: fix that sender thread is never terminated Empty 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 | 3 --- 1 files changed, 0 insertions(+), 3 deletions(-) diff --git a/ryu/controller/controller.py b/ryu/controller/controller.py index 9dc745a..841b388 100644 --- a/ryu/controller/controller.py +++ b/ryu/controller/controller.py @@ -196,10 +196,7 @@ class Datapath(object): buf = self.send_q.get() self.socket.sendall(buf) finally: - q = self.send_q self.send_q = None - while q.get(): - pass def send(self, buf): if self.send_q: -- 1.7.1 > YAMAMOTO Takashi > >> >> 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 > ------------------------------------------------------------------------------ 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
