time_t idletime = time(&idletime)-mem->lastcall;
if ((mem->lastcall != 0) && (qe->parent->autopausedelay > idletime)) {
ao2_unlock(qe->parent);
+ ao2_ref(mem, -1);
return;
}
+ ao2_ref(mem, -1);
}
ao2_unlock(qe->parent);
}
switch (remove_from_queue(args.queuename, args.interface)) {
case RES_OKAY:
- if (!mem || ast_strlen_zero(mem->membername) || !log_membername_as_agent) {
+ if (!mem || ast_strlen_zero(mem->membername)) {
ast_queue_log(args.queuename, chan->uniqueid, args.interface, "REMOVEMEMBER", "%s", "");
} else {
ast_queue_log(args.queuename, chan->uniqueid, mem->membername, "REMOVEMEMBER", "%s", "");
break;
}
+ if (mem) {
+ ao2_ref(mem, -1);
+ }
+
return res;
}
} else if (!strcasecmp(args.option, "penalty") && !ast_strlen_zero(args.interface) &&
((m = interface_exists(q, args.interface)))) {
count = m->penalty;
+ ao2_ref(m, -1);
} else if (!strcasecmp(args.option, "paused") && !ast_strlen_zero(args.interface) &&
((m = interface_exists(q, args.interface)))) {
count = m->paused;
+ ao2_ref(m, -1);
} else if (!strcasecmp(args.option, "ignorebusy") && !ast_strlen_zero(args.interface) &&
((m = interface_exists(q, args.interface)))) {
count = m->ignorebusy;
+ ao2_ref(m, -1);
}
ao2_unlock(q);
queue_t_unref(q, "Done with temporary reference in QUEUE_MEMBER()");
}
} else {
ast_log(LOG_ERROR, "Invalid option, only penalty , paused or ignorebusy are valid\n");
+ ao2_ref(m, -1);
+ ao2_unlock(q);
+ ao2_ref(q, -1);
return -1;
}
+ ao2_ref(m, -1);
} else {
- ast_log(LOG_ERROR, "Invalid interface or queue\n");
+ ao2_unlock(q);
+ ao2_ref(q, -1);
+ ast_log(LOG_ERROR, "Invalid interface for queue\n");
return -1;
}
ao2_unlock(q);
+ ao2_ref(q, -1);
} else {
ast_log(LOG_ERROR, "Invalid queue\n");
return -1;
switch (remove_from_queue(queuename, interface)) {
case RES_OKAY:
- if (!mem || ast_strlen_zero(mem->membername) || !log_membername_as_agent) {
+ if (!mem || ast_strlen_zero(mem->membername)) {
ast_queue_log(queuename, "MANAGER", interface, "REMOVEMEMBER", "%s", "");
} else {
ast_queue_log(queuename, "MANAGER", mem->membername, "REMOVEMEMBER", "%s", "");
break;
}
+ if (mem) {
+ ao2_ref(mem, -1);
+ }
+
return 0;
}
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 (!mem || ast_strlen_zero(mem->membername) || !log_membername_as_agent) {
+ 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;
case RES_EXISTS: