static void *pbx_outgoing_exec(void *data)
{
RAII_VAR(struct pbx_outgoing *, outgoing, data, ao2_cleanup);
- enum ast_dial_result res = ast_dial_run(outgoing->dial, NULL, 0);
+ enum ast_dial_result res;
/* Notify anyone interested that dialing is complete */
ast_mutex_lock(&outgoing->lock);
+ res = ast_dial_run(outgoing->dial, NULL, 0);
outgoing->dialed = 1;
ast_cond_signal(&outgoing->cond);
ast_mutex_unlock(&outgoing->lock);
return NULL;
}
+ ast_mutex_lock(&outgoing->lock);
if (!ast_strlen_zero(outgoing->app)) {
struct ast_app *app = pbx_findapp(outgoing->app);
}
/* Notify anyone else again that may be interested that execution is complete */
- ast_mutex_lock(&outgoing->lock);
outgoing->executed = 1;
ast_cond_signal(&outgoing->cond);
ast_mutex_unlock(&outgoing->lock);
/* Wait for dialing to complete */
if (synchronous) {
ast_mutex_lock(&outgoing->lock);
+ if (channel) {
+ ast_channel_unlock(*channel);
+ }
while (!outgoing->dialed) {
ast_cond_wait(&outgoing->cond, &outgoing->lock);
}
+ if (channel) {
+ ast_channel_lock(*channel);
+ }
ast_mutex_unlock(&outgoing->lock);
}