aboutsummaryrefslogtreecommitdiffstats
path: root/channels/chan_agent.c
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-08-26 04:53:49 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-08-26 04:53:49 +0000
commita72d24ed119fcf1e9abe39091df2187a518ebc79 (patch)
tree3082e96d779a5dbfbeef2498ee3320c0b0a3fc09 /channels/chan_agent.c
parent1fe8908881c6dbe8973c6b36e1a3947d5b72f9aa (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/chan_agent.c')
-rwxr-xr-xchannels/chan_agent.c14
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);