diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2003-08-26 04:53:49 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2003-08-26 04:53:49 +0000 |
commit | a72d24ed119fcf1e9abe39091df2187a518ebc79 (patch) | |
tree | 3082e96d779a5dbfbeef2498ee3320c0b0a3fc09 /channels | |
parent | 1fe8908881c6dbe8973c6b36e1a3947d5b72f9aa (diff) |
handle app_lock properly
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@1439 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rwxr-xr-x | channels/chan_agent.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/channels/chan_agent.c b/channels/chan_agent.c index ef9fac05b..39f2cbac2 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); |