summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorJonathan Rose <jrose@digium.com>2012-09-21 15:41:09 +0000
committerJonathan Rose <jrose@digium.com>2012-09-21 15:41:09 +0000
commitf56c0ecf9cf2e3d31983f33e015f2745909743bf (patch)
tree883d2b141a58873e157632c88fd8bfe796df38a0 /apps
parent368b4c6166b3e25399d474448c12c4576392a147 (diff)
app_queue: Make queue reload members and variants of that work
Prior to this patch, 'queue reload members' cli command did not work at all. This also affects the manager function 'QueueReload' when supplied with the 'members: yes' field. (closes issue AST-956) Reported by: John Bigelow ........ Merged revisions 373298 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 373300 from http://svn.asterisk.org/svn/asterisk/branches/10 ........ Merged revisions 373318 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@373319 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'apps')
-rw-r--r--apps/app_queue.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/apps/app_queue.c b/apps/app_queue.c
index 3c00d7692..a96d811e1 100644
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -7788,6 +7788,7 @@ static void reload_single_queue(struct ast_config *cfg, struct ast_flags *mask,
}
if (member_reload) {
ao2_callback(q->members, OBJ_NODATA, mark_member_dead, NULL);
+ q->found = 1;
}
/* On the first pass we just read the parameters of the queue */
@@ -7826,6 +7827,17 @@ static void reload_single_queue(struct ast_config *cfg, struct ast_flags *mask,
queue_t_unref(q, "Expiring creation reference");
}
+static int remove_members_and_mark_unfound(void *obj, void *arg, int flags)
+{
+ struct call_queue *q = obj;
+ char *queuename = arg;
+ if (!q->realtime && (ast_strlen_zero(queuename) || !strcasecmp(queuename, q->name))) {
+ q->found = 0;
+
+ }
+ return 0;
+}
+
static int mark_dead_and_unfound(void *obj, void *arg, int flags)
{
struct call_queue *q = obj;
@@ -7866,6 +7878,7 @@ static int reload_queues(int reload, struct ast_flags *mask, const char *queuena
char *cat;
struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };
const int queue_reload = ast_test_flag(mask, QUEUE_RELOAD_PARAMETERS);
+ const int member_reload = ast_test_flag(mask, QUEUE_RELOAD_MEMBER);
if (!(cfg = ast_config_load("queues.conf", config_flags))) {
ast_log(LOG_NOTICE, "No call queueing config file (queues.conf), so no call queues\n");
@@ -7887,6 +7900,10 @@ static int reload_queues(int reload, struct ast_flags *mask, const char *queuena
ao2_callback(queues, OBJ_NODATA | OBJ_NOLOCK, mark_dead_and_unfound, (char *) queuename);
}
+ if (member_reload) {
+ ao2_callback(queues, OBJ_NODATA, remove_members_and_mark_unfound, (char *) queuename);
+ }
+
/* Chug through config file */
cat = NULL;
while ((cat = ast_category_browse(cfg, cat)) ) {