diff options
author | mmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-06-26 20:58:48 +0000 |
---|---|---|
committer | mmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-06-26 20:58:48 +0000 |
commit | 7b869c178f8cdaf98b55acde7e82efdccc8718be (patch) | |
tree | 2c6e203e39f58a9c257eaacf70ae0ae2afdd6982 | |
parent | d8f96b6423ca0cbd81678ef83c0817476026a8c2 (diff) |
Merged revisions 125477 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
................
r125477 | mmichelson | 2008-06-26 15:57:41 -0500 (Thu, 26 Jun 2008) | 19 lines
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)
........
................
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@125478 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | apps/app_queue.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/apps/app_queue.c b/apps/app_queue.c index 79d67690d..f8cb61988 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -5281,9 +5281,19 @@ static char *__queues_show(struct mansession *s, int fd, int argc, char **argv) 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))) { @@ -5349,11 +5359,15 @@ static char *__queues_show(struct mansession *s, int fd, int argc, char **argv) } 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) |