return 0;
}
- ast_channel_lock(tmp->chan);
- while (ast_channel_trylock(qe->chan)) {
- CHANNEL_DEADLOCK_AVOIDANCE(tmp->chan);
- }
+ ast_channel_lock_both(tmp->chan, qe->chan);
if (qe->cancel_answered_elsewhere) {
ast_set_flag(tmp->chan, AST_FLAG_ANSWERED_ELSEWHERE);
strcpy(tmp->chan->cdr->userfield, qe->chan->cdr->userfield);
}
+ ast_channel_unlock(tmp->chan);
+ ast_channel_unlock(qe->chan);
+
/* Place the call, but don't wait on the answer */
if ((res = ast_call(tmp->chan, location, 0))) {
/* Again, keep going even if there's an error */
ast_debug(1, "ast call on peer returned %d\n", res);
ast_verb(3, "Couldn't call %s\n", tmp->interface);
- ast_channel_unlock(tmp->chan);
- ast_channel_unlock(qe->chan);
do_hang(tmp);
(*busies)++;
update_status(qe->parent, tmp->member, get_queue_member_status(tmp->member));
} else if (qe->parent->eventwhencalled) {
char vars[2048];
+ ast_channel_lock_both(tmp->chan, qe->chan);
+
manager_event(EVENT_FLAG_AGENT, "AgentCalled",
"Queue: %s\r\n"
"AgentCalled: %s\r\n"
S_COR(qe->chan->connected.id.name.valid, qe->chan->connected.id.name.str, "unknown"),
qe->chan->context, qe->chan->exten, qe->chan->priority, qe->chan->uniqueid,
qe->parent->eventwhencalled == QUEUE_EVENT_VARIABLES ? vars2manager(qe->chan, vars, sizeof(vars)) : "");
+
+ ast_channel_unlock(tmp->chan);
+ ast_channel_unlock(qe->chan);
+
ast_verb(3, "Called %s\n", tmp->interface);
}
- ast_channel_unlock(tmp->chan);
- ast_channel_unlock(qe->chan);
update_status(qe->parent, tmp->member, get_queue_member_status(tmp->member));
return 1;
} else {
struct ast_party_redirecting redirecting;
- ast_channel_lock(o->chan);
- while (ast_channel_trylock(in)) {
- CHANNEL_DEADLOCK_AVOIDANCE(o->chan);
- }
+ ast_channel_lock_both(o->chan, in);
ast_channel_inherit_variables(in, o->chan);
ast_channel_datastore_inherit(in, o->chan);