diff options
Diffstat (limited to 'channels/chan_alsa.c')
-rw-r--r-- | channels/chan_alsa.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/channels/chan_alsa.c b/channels/chan_alsa.c index 5c921b918..d274b736b 100644 --- a/channels/chan_alsa.c +++ b/channels/chan_alsa.c @@ -812,19 +812,23 @@ static struct ast_channel *alsa_new(struct chan_alsa_pvt *p, int state) ast_string_field_set(tmp, language, language); p->owner = tmp; ast_setstate(tmp, state); - ast_mutex_lock(&usecnt_lock); - usecnt++; - ast_mutex_unlock(&usecnt_lock); - ast_update_use_count(); + if (ast_jb_configure(tmp, &global_jbconf)) { + ast_hangup(tmp); + p->owner = NULL; + return NULL; + } if (state != AST_STATE_DOWN) { if (ast_pbx_start(tmp)) { ast_log(LOG_WARNING, "Unable to start PBX on %s\n", tmp->name); ast_hangup(tmp); - tmp = NULL; + p->owner = NULL; + return NULL; } } - if (tmp) - ast_jb_configure(tmp, &global_jbconf); + ast_mutex_lock(&usecnt_lock); + usecnt++; + ast_mutex_unlock(&usecnt_lock); + ast_update_use_count(); } return tmp; } |