From b02c65752ccfc2317693644c424d221339d57e19 Mon Sep 17 00:00:00 2001
From: Jonathan Rose <jrose@digium.com>
Date: Tue, 4 Sep 2012 19:26:02 +0000
Subject: [PATCH] app_queue: Only log PAUSEALL/UNPAUSEALL when 1+ memebers
 changed.

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          | 10 ++++++++++
 apps/app_queue.c | 15 ++++++++++-----
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/CHANGES b/CHANGES
index 8bcbf939eb..85dcfcbf60 100644
--- a/CHANGES
+++ b/CHANGES
@@ -7,6 +7,16 @@
 === and the other UPGRADE files for older releases.
 ===
 ==============================================================================
+------------------------------------------------------------------------------
+--- 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 --------------------
 ------------------------------------------------------------------------------
diff --git a/apps/app_queue.c b/apps/app_queue.c
index 8cc6cc1a5c..b94f1de16d 100644
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -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) {
-- 
GitLab