From 1051227dd96341f6e149739c1465b2e763cc67ea Mon Sep 17 00:00:00 2001 From: Kevin Harwell Date: Mon, 27 Jan 2020 11:44:45 -0600 Subject: [PATCH] res_stasis: trigger cleanup after update The cleanup code in stasis shuts down applications if they are in a deactivated state, and no longer have explicit subscriptions. When registering an app the cleanup code was running before calling 'update'. When it should be executed after 'update' since a call to register may re-activate the app. We don't want it to shutdown before the 'update' otherwise the app won't be re-activated, or registered. This patch makes it so the cleanup code is executed post 'update'. ASTERISK-28679 #close Change-Id: I8f2c0b17e33bb8128441567b97fd4c7bf74a327b --- res/res_stasis.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/res/res_stasis.c b/res/res_stasis.c index a8cc14c5ce..85596589c8 100644 --- a/res/res_stasis.c +++ b/res/res_stasis.c @@ -1688,12 +1688,11 @@ static int __stasis_app_register(const char *app_name, stasis_app_cb handler, vo if (app) { /* * We need to unlock the apps_registry before calling app_update to - * prevent the possibility of a deadlock with the session. We'll still - * run the lazy cleanup first though. + * prevent the possibility of a deadlock with the session. */ - cleanup(); ao2_unlock(apps_registry); app_update(app, handler, data); + cleanup(); return 0; } @@ -1718,11 +1717,12 @@ static int __stasis_app_register(const char *app_name, stasis_app_cb handler, vo } ao2_link_flags(apps_registry, app, OBJ_NOLOCK); + ao2_unlock(apps_registry); + /* We lazily clean up the apps_registry, because it's good enough to * prevent memory leaks, and we're lazy. */ cleanup(); - ao2_unlock(apps_registry); return 0; }