]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_stasis: trigger cleanup after update
authorKevin Harwell <kharwell@digium.com>
Mon, 27 Jan 2020 17:44:45 +0000 (11:44 -0600)
committerKevin Harwell <kharwell@digium.com>
Mon, 27 Jan 2020 17:59:02 +0000 (11:59 -0600)
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

index a8cc14c5ced9ab4837e43abb959dff29857fb48f..85596589c8d5db7cb372e6fe60f1fa8323f4c002 100644 (file)
@@ -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;
 }