app_queue: Only log PAUSEALL/UNPAUSEALL when 1+ memebers changed.
authorJonathan Rose <jrose@digium.com>
Tue, 4 Sep 2012 19:26:02 +0000 (19:26 +0000)
committerJonathan Rose <jrose@digium.com>
Tue, 4 Sep 2012 19:26:02 +0000 (19:26 +0000)
Prior to this patch, if pause or unpause was issued on an interface
without specifying a specific queue, a PAUSEALL or UNPAUSEALL event
would be logged in the queue log even if that interface wasn't a
member of any queues. This patch changes it so that these events are
only logged when at least one member of any queue exists for that
interface.

(closes issue AST-946)
Reported by: John Bigelow
Review: https://reviewboard.asterisk.org/r/2079/

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

CHANGES
apps/app_queue.c

diff --git a/CHANGES b/CHANGES
index 8bcbf93..85dcfcb 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -8,6 +8,16 @@
 ===
 ==============================================================================
 ------------------------------------------------------------------------------
+--- Functionality changes from Asterisk 11 to Asterisk 12 --------------------
+------------------------------------------------------------------------------
+
+Logging
+-------------------
+ * When performing queue pause/unpause on an interface without specifying an
+   individual queue, the PAUSEALL/UNPAUSEALL event will only be logged if at
+   least one member of any queue exists for that interface.
+
+------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 10 to Asterisk 11 --------------------
 ------------------------------------------------------------------------------
 
index 8cc6cc1..b94f1de 100644 (file)
@@ -5944,11 +5944,6 @@ static int set_member_paused(const char *queuename, const char *interface, const
        struct ao2_iterator queue_iter;
        int failed;
 
-       /* Special event for when all queues are paused - individual events still generated */
-       /* XXX In all other cases, we use the membername, but since this affects all queues, we cannot */
-       if (ast_strlen_zero(queuename))
-               ast_queue_log("NONE", "NONE", interface, (paused ? "PAUSEALL" : "UNPAUSEALL"), "%s", "");
-
        queue_iter = ao2_iterator_init(queues, 0);
        while ((q = ao2_t_iterator_next(&queue_iter, "Iterate over queues"))) {
                ao2_lock(q);
@@ -5971,6 +5966,16 @@ static int set_member_paused(const char *queuename, const char *interface, const
                                        continue;
                                }
                                found++;
+
+                               /* Before we do the PAUSE/UNPAUSE log, if this was a PAUSEALL/UNPAUSEALL, log that here, but only on the first found entry. */
+                               if (found == 1) {
+
+                                       /* XXX In all other cases, we use the membername, but since this affects all queues, we cannot */
+                                       if (ast_strlen_zero(queuename)) {
+                                               ast_queue_log("NONE", "NONE", interface, (paused ? "PAUSEALL" : "UNPAUSEALL"), "%s", "");
+                                       }
+                               }
+
                                mem->paused = paused;
 
                                if (queue_persistent_members) {