From: Russell Bryant Date: Sat, 16 Oct 2004 15:35:23 +0000 (+0000) Subject: Fix hangup handling with chansiavail with agent (bug #2658) X-Git-Tag: 1.0.11.1~429 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e98d85bf095f05c5ab1fcdf129a20bd583876bd2;p=thirdparty%2Fasterisk.git Fix hangup handling with chansiavail with agent (bug #2658) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-0@4016 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_agent.c b/channels/chan_agent.c index c5dcc891e5..6e8c3661ae 100755 --- a/channels/chan_agent.c +++ b/channels/chan_agent.c @@ -519,9 +519,22 @@ static int agent_hangup(struct ast_channel *ast) ast->pvt->pvt = NULL; p->app_sleep_cond = 1; p->acknowledged = 0; - if (p->start && (ast->_state != AST_STATE_UP)) + + /* if they really are hung up then set start to 0 so the test + * later if we're called on an already downed channel + * doesn't cause an agent to be logged out like when + * agent_request() is followed immediately by agent_hangup() + * as in apps/app_chanisavail.c:chanavail_exec() + */ + + ast_log(LOG_DEBUG, "Hangup called for state %s\n", ast_state2str(ast->_state)); + if (p->start && (ast->_state != AST_STATE_UP)) { howlong = time(NULL) - p->start; - time(&p->start); + p->start = 0; + } else if (ast->_state == AST_STATE_RESERVED) { + howlong = 0; + } else + p->start = 0; if (p->chan) { /* If they're dead, go ahead and hang up on the agent now */ if (!ast_strlen_zero(p->loginchan)) {