From: Mark Spencer Date: Tue, 26 Aug 2003 04:53:49 +0000 (+0000) Subject: handle app_lock properly X-Git-Tag: 0.5.0~57 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e5732d17438da7ac69ccb4750ab19757cb30a974;p=thirdparty%2Fasterisk.git handle app_lock properly git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1439 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_agent.c b/channels/chan_agent.c index ef9fac05be..39f2cbac25 100755 --- a/channels/chan_agent.c +++ b/channels/chan_agent.c @@ -557,14 +557,13 @@ static int agent_ack_sleep( void *data ) break; } ast_mutex_lock(&p->lock); - if (p->app_sleep_cond) { + if (!p->app_sleep_cond) { ast_mutex_unlock(&p->lock); res = 0; break; } else if (res == '#') { - check_availability(p, 0); ast_mutex_unlock(&p->lock); - res = 0; + res = 1; break; } ast_mutex_unlock(&p->lock); @@ -1218,12 +1217,17 @@ static int __login_exec(struct ast_channel *chan, void *data, int callbackmode) ast_mutex_lock(&p->lock); p->owning_app = pthread_self(); ast_mutex_unlock(&p->lock); - if (p->ackcall > 1) + if (p->ackcall > 1) res = agent_ack_sleep(p); else res = ast_safe_sleep_conditional( chan, 1000, - agent_cont_sleep, p ); + agent_cont_sleep, p ); ast_mutex_unlock( &p->app_lock ); + if ((p->ackcall > 1) && (res == 1)) { + ast_mutex_lock(&p->lock); + check_availability(p, 0); + ast_mutex_unlock(&p->lock); + } sched_yield(); } ast_mutex_lock(&p->lock);