From 75865d5802e68f217cb6d5b27e205948a935883e Mon Sep 17 00:00:00 2001 From: russell Date: Thu, 22 Jun 2006 17:05:17 +0000 Subject: - dynamically allocate the ast_jb structure that is on the channel structure so that channels not using a jitterbuffer don't waste as much memory - ensure that the channel drivers that use jitterbuffers can handle a failure from configuring a jitterbuffer on a new channel because of a memory allocation error - On passing through these channel drivers, configure the jitterbuffer before starting the PBX thread instead of afterwards. If the pbx fails to start for whatever reason, this would have caused a crash. - Also on passing, move the increase of the usecount to after all of the possible failure conditions in the function - fix a place where ast_update_use_count() was not called - ensure that the owner channel pointer of the channel pvt strcutures is set to NULL in failure conditions git-svn-id: http://svn.digium.com/svn/asterisk/trunk@35553 f38db490-d61c-443f-a65b-d21fe96a405b --- channels/chan_alsa.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'channels/chan_alsa.c') 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; } -- cgit v1.2.3