Fix a crash that would happen when attempting to unload the app_queue module.
[asterisk/asterisk.git] / apps / app_queue.c
index 3c3a2cf..ca67f0a 100644 (file)
@@ -1409,8 +1409,6 @@ static void destroy_queue(void *obj)
        struct call_queue *q = obj;
        int i;
 
-       ast_debug(0, "Queue destructor called for queue '%s'!\n", q->name);
-
        free_members(q, 1);
        ast_string_field_free_memory(q);
        for (i = 0; i < MAX_PERIODIC_ANNOUNCEMENTS; i++) {
@@ -6178,6 +6176,8 @@ static int unload_module(void)
 {
        int res;
        struct ast_context *con;
+       struct ao2_iterator q_iter;
+       struct call_queue *q = NULL;
 
        if (device_state.thread != AST_PTHREADT_NULL) {
                device_state.stop = 1;
@@ -6220,6 +6220,11 @@ static int unload_module(void)
 
        clear_and_free_interfaces();
 
+       q_iter = ao2_iterator_init(queues, 0);
+       while ((q = ao2_iterator_next(&q_iter))) {
+               ao2_unlink(queues, q);
+               queue_unref(q);
+       }
        ao2_ref(queues, -1);
 
        return res;