From 77a6aa932736d89d40b8411a02a71d13cba6df4c Mon Sep 17 00:00:00 2001 From: Mark Spencer <markster@digium.com> Date: Wed, 27 Aug 2003 15:59:43 +0000 Subject: [PATCH] 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 --- channels/chan_agent.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) 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); } -- GitLab