From: Mark Spencer Date: Wed, 27 Aug 2003 15:59:43 +0000 (+0000) Subject: We have to release app_lock even if there is no channel logged in anymore X-Git-Tag: 0.5.0~54 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=77a6aa932736d89d40b8411a02a71d13cba6df4c;p=thirdparty%2Fasterisk.git We have to release app_lock even if there is no channel logged in anymore git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1442 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_agent.c b/channels/chan_agent.c index 403dd26677..1534f58c52 100755 --- a/channels/chan_agent.c +++ b/channels/chan_agent.c @@ -264,6 +264,8 @@ static struct ast_frame *agent_read(struct ast_channel *ast) if (!f) { /* If there's a channel, hang it up (if it's on a callback) make it NULL */ if (p->chan) { + /* Note that we don't hangup if it's not a callback because Asterisk will do it + for us when the PBX instance that called login finishes */ if (strlen(p->loginchan)) ast_hangup(p->chan); p->chan = NULL; @@ -500,12 +502,14 @@ static int agent_hangup(struct ast_channel *ast) p->abouttograb = 0; } else if (p->dead) { free(p); - } else if (p->chan) { - /* Not dead -- check availability now */ - ast_mutex_lock(&p->lock); - /* Store last disconnect time */ - gettimeofday(&p->lastdisc, NULL); - ast_mutex_unlock(&p->lock); + } else { + if (p->chan) { + /* Not dead -- check availability now */ + ast_mutex_lock(&p->lock); + /* Store last disconnect time */ + gettimeofday(&p->lastdisc, NULL); + ast_mutex_unlock(&p->lock); + } /* Release ownership of the agent to other threads (presumably running the login app). */ ast_mutex_unlock(&p->app_lock); }