diff options
author | Richard Mudgett <rmudgett@digium.com> | 2013-10-22 19:04:53 +0000 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2013-10-22 19:04:53 +0000 |
commit | 4ae7a4b1bad98840171ab374aede43b16c9ac89b (patch) | |
tree | 023376a0b87ca870915322d668ceb5676f4e7b1f /apps | |
parent | d5db1f76f84f485bb0854b1ed986a04edf72e4c6 (diff) |
app_queue: Fix CLI "queue remove member" queue_log entry.
The queue_log entry resulting from CLI "queue remove member" when
log_membername_as_agent is enabled is wrong. It always uses the interface
name instead of the member name in the queue_log entry.
* Get the queue member before removing it from the queue so the member
name is available for the queue_log entry.
(closes issue ASTERISK-21826)
Reported by: Oscar Esteve
Patches:
fix_membername.diff (license #6505) patch uploaded by Oscar Esteve
(modified to fix potential ref leak)
........
Merged revisions 401433 from http://svn.asterisk.org/svn/asterisk/branches/11
........
Merged revisions 401434 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@401435 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'apps')
-rw-r--r-- | apps/app_queue.c | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/apps/app_queue.c b/apps/app_queue.c index d91a02013..522c602c1 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -9727,6 +9727,7 @@ static char *handle_queue_remove_member(struct ast_cli_entry *e, int cmd, struct { const char *queuename, *interface; struct member *mem = NULL; + char *res = CLI_FAILURE; switch (cmd) { case CLI_INIT: @@ -9748,36 +9749,39 @@ static char *handle_queue_remove_member(struct ast_cli_entry *e, int cmd, struct queuename = a->argv[5]; interface = a->argv[3]; + if (log_membername_as_agent) { + mem = find_member_by_queuename_and_interface(queuename, interface); + } + switch (remove_from_queue(queuename, interface)) { case RES_OKAY: - if (log_membername_as_agent) { - mem = find_member_by_queuename_and_interface(queuename, interface); - } if (!mem || ast_strlen_zero(mem->membername)) { ast_queue_log(queuename, "CLI", interface, "REMOVEMEMBER", "%s", ""); } else { ast_queue_log(queuename, "CLI", mem->membername, "REMOVEMEMBER", "%s", ""); } - if (mem) { - ao2_ref(mem, -1); - } ast_cli(a->fd, "Removed interface %s from queue '%s'\n", interface, queuename); - return CLI_SUCCESS; + res = CLI_SUCCESS; + break; case RES_EXISTS: ast_cli(a->fd, "Unable to remove interface '%s' from queue '%s': Not there\n", interface, queuename); - return CLI_FAILURE; + break; case RES_NOSUCHQUEUE: ast_cli(a->fd, "Unable to remove interface from queue '%s': No such queue\n", queuename); - return CLI_FAILURE; + break; case RES_OUTOFMEMORY: ast_cli(a->fd, "Out of memory\n"); - return CLI_FAILURE; + break; case RES_NOT_DYNAMIC: ast_cli(a->fd, "Unable to remove interface '%s' from queue '%s': Member is not dynamic\n", interface, queuename); - return CLI_FAILURE; - default: - return CLI_FAILURE; + break; } + + if (mem) { + ao2_ref(mem, -1); + } + + return res; } static char *complete_queue_pause_member(const char *line, const char *word, int pos, int state) |