At Tue, 28 Jun 2016 16:19:52 +0900, Takashi YAMAMOTO wrote: > > [1 <text/plain; UTF-8 (7bit)>] > On Tue, Jun 28, 2016 at 3:16 PM, IWAMOTO Toshihiro <iwam...@valinux.co.jp> > wrote: > > > At Tue, 28 Jun 2016 15:02:52 +0900, > > Takashi YAMAMOTO wrote: > > > > > > On Tue, Jun 28, 2016 at 2:25 PM, IWAMOTO Toshihiro < > > iwam...@valinux.co.jp> > > > wrote: > > > > > > > If an AppManager.close call is started and all AppManager.services > > > > are stop, AppManager.run_apps starts another close() call, > > > > > > > > > > why joinall in run_apps returns before AppManager.close finish clearing > > > self.applications? > > > > Because OfctlService isn't in services (run_apps local variable) and > > RyuApp.close() causes eventlet context switches? > > > > why it isn't in "services"? > i thought instantiate_apps returned auto-loaded apps as well. > if not, isn't it better to fix it instead?
Look for "t is not None" in that function. I thought this is intentional for some reason, and changing this would make existing applicitions unstoppable. > > > > resulting in a strange error in close(). Prevent that using > > > > a semaphore. > > > > > > > > Signed-off-by: IWAMOTO Toshihiro <iwam...@valinux.co.jp> > > > > --- > > > > ryu/base/app_manager.py | 12 ++++++++---- > > > > 1 file changed, 8 insertions(+), 4 deletions(-) > > > > > > > > diff --git a/ryu/base/app_manager.py b/ryu/base/app_manager.py > > > > index 13e41f4..f684259 100644 > > > > --- a/ryu/base/app_manager.py > > > > +++ b/ryu/base/app_manager.py > > > > @@ -386,6 +386,7 @@ class AppManager(object): > > > > self.applications = {} > > > > self.contexts_cls = {} > > > > self.contexts = {} > > > > + self.close_sem = hub.Semaphore() > > > > > > > > def load_app(self, name): > > > > mod = utils.import_module(name) > > > > @@ -541,7 +542,10 @@ class AppManager(object): > > > > self._close(app) > > > > close_dict.clear() > > > > > > > > - for app_name in list(self.applications.keys()): > > > > - self.uninstantiate(app_name) > > > > - assert not self.applications > > > > - close_all(self.contexts) > > > > + # This semaphore prevents parallel execution of this function, > > > > + # as run_apps's finally clause starts another close() call. > > > > + with self.close_sem: > > > > + for app_name in list(self.applications.keys()): > > > > + self.uninstantiate(app_name) > > > > + assert not self.applications > > > > + close_all(self.contexts) > > > > -- > > > > 2.1.4 > > > > > > > > > > > > > > > > > > ------------------------------------------------------------------------------ > > > > Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San > > > > Francisco, CA to explore cutting-edge tech and listen to tech > > luminaries > > > > present their vision of the future. This family event has something for > > > > everyone, including kids. Get more information and register today. > > > > http://sdm.link/attshape > > > > _______________________________________________ > > > > Ryu-devel mailing list > > > > Ryu-devel@lists.sourceforge.net > > > > https://lists.sourceforge.net/lists/listinfo/ryu-devel > > > > > > > [2 <text/html; UTF-8 (quoted-printable)>] ------------------------------------------------------------------------------ Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San Francisco, CA to explore cutting-edge tech and listen to tech luminaries present their vision of the future. This family event has something for everyone, including kids. Get more information and register today. http://sdm.link/attshape _______________________________________________ Ryu-devel mailing list Ryu-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ryu-devel