]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-6929 #resolve #comment fix deadlock in mod_rayo
authorChris Rienzo <chris.rienzo@grasshopper.com>
Mon, 27 Oct 2014 14:05:12 +0000 (10:05 -0400)
committerChris Rienzo <chris.rienzo@grasshopper.com>
Mon, 27 Oct 2014 14:05:12 +0000 (10:05 -0400)
src/mod/event_handlers/mod_rayo/mod_rayo.c

index 00e74f8e47589d35b1c48382c3ca7281e9b1d555..f1c201c4e388727cee98b5fd09516de359a1cd8f 100644 (file)
@@ -948,19 +948,20 @@ void rayo_actor_destroy(struct rayo_actor *actor, const char *file, int line)
                } else {
                        switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, "", line, "", SWITCH_LOG_DEBUG, "Destroying %s\n", RAYO_JID(actor));
                }
+               switch_core_hash_delete(globals.destroy_actors, RAYO_JID(actor));
+               switch_mutex_unlock(globals.actors_mutex);
+               /* safe to destroy parent now */
                if (actor->cleanup_fn) {
                        actor->cleanup_fn(actor);
                }
                if (actor->parent) {
-                       /* safe to destroy parent now */
                        RAYO_RELEASE(actor->parent);
                }
-               switch_core_hash_delete(globals.destroy_actors, RAYO_JID(actor));
                switch_core_destroy_memory_pool(&pool);
        } else {
                switch_core_hash_insert(globals.destroy_actors, RAYO_JID(actor), actor);
+               switch_mutex_unlock(globals.actors_mutex);
        }
-       switch_mutex_unlock(globals.actors_mutex);
 }
 
 /**