queues container needs locking when using the OBJ_NOLOCK flag
authorGregory Nietsky <gregory@distrotech.co.za>
Mon, 24 Oct 2011 07:40:18 +0000 (07:40 +0000)
committerGregory Nietsky <gregory@distrotech.co.za>
Mon, 24 Oct 2011 07:40:18 +0000 (07:40 +0000)
........

Merged revisions 342017 from http://svn.asterisk.org/svn/asterisk/branches/10

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@342018 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_queue.c

index ce886df..d3a5316 100644 (file)
@@ -7054,6 +7054,9 @@ static int reload_queues(int reload, struct ast_flags *mask, const char *queuena
                return -1;
        }
 
+       /* We've made it here, so it looks like we're doing operations on all queues. */
+       ao2_lock(queues);
+
        /* Mark all queues as dead for the moment if we're reloading queues.
         * For clarity, we could just be reloading members, in which case we don't want to mess
         * with the other queue parameters at all*/
@@ -7077,6 +7080,7 @@ static int reload_queues(int reload, struct ast_flags *mask, const char *queuena
        if (queue_reload) {
                ao2_callback(queues, OBJ_NODATA | OBJ_MULTIPLE | OBJ_UNLINK | OBJ_NOLOCK, kill_dead_queues, (char *) queuename);
        }
+       ao2_unlock(queues);
        return 0;
 }