[asterisk-commits] mmichelson: trunk r125477 - /trunk/apps/app_queue.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Jun 26 15:57:41 CDT 2008


Author: mmichelson
Date: Thu Jun 26 15:57:41 2008
New Revision: 125477

URL: http://svn.digium.com/view/asterisk?view=rev&rev=125477
Log:
Merged revisions 125476 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r125476 | mmichelson | 2008-06-26 15:56:01 -0500 (Thu, 26 Jun 2008) | 11 lines

Prior to this patch, the "queue show" command used cached
information for realtime queues instead of giving up-to-date
info. Now realtime is queried for the latest and greatest in
queue info.

(closes issue #12858)
Reported by: bcnit
Patches:
      queue_show.patch uploaded by putnopvut (license 60)


........

Modified:
    trunk/apps/app_queue.c

Modified: trunk/apps/app_queue.c
URL: http://svn.digium.com/view/asterisk/trunk/apps/app_queue.c?view=diff&rev=125477&r1=125476&r2=125477
==============================================================================
--- trunk/apps/app_queue.c (original)
+++ trunk/apps/app_queue.c Thu Jun 26 15:57:41 2008
@@ -5438,9 +5438,19 @@
 	if (argc != 2 && argc != 3)
 		return CLI_SHOWUSAGE;
 
-	/* We only want to load realtime queues when a specific queue is asked for. */
-	if (argc == 3)	/* specific queue */
+	if (argc == 3)	{ /* specific queue */
 		load_realtime_queue(argv[2]);
+	}
+	else if (ast_check_realtime("queues")) {
+		struct ast_config *cfg = ast_load_realtime_multientry("queues", "name LIKE", "%", SENTINEL);
+		char *queuename;
+		if (cfg) {
+			for (queuename = ast_category_browse(cfg, NULL); !ast_strlen_zero(queuename); queuename = ast_category_browse(cfg, queuename)) {
+				load_realtime_queue(queuename);
+			}
+			ast_config_destroy(cfg);
+		}
+	}
 
 	queue_iter = ao2_iterator_init(queues, 0);
 	while ((q = ao2_iterator_next(&queue_iter))) {
@@ -5506,11 +5516,15 @@
 		}
 		do_print(s, fd, "");	/* blank line between entries */
 		ao2_unlock(q);
-		if (argc == 3)	{ /* print a specific entry */
+		if (q->realtime || argc == 3) {
+			/* If a queue is realtime, then that means we used load_realtime_queue() above
+			 * to get its information. This means we have an extra reference we need to
+			 * remove at this point. If a specific queue was requested, then it also needs
+			 * to be unreffed here even if it is not a realtime queue.
+			 */
 			queue_unref(q);
-			break;
-		}
-		queue_unref(q);
+		}
+		queue_unref(q); /* Unref the iterator's reference */
 	}
 	if (!found) {
 		if (argc == 3)




More information about the asterisk-commits mailing list