]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix hangup handling with chansiavail with agent (bug #2658)
authorRussell Bryant <russell@russellbryant.com>
Sat, 16 Oct 2004 15:35:23 +0000 (15:35 +0000)
committerRussell Bryant <russell@russellbryant.com>
Sat, 16 Oct 2004 15:35:23 +0000 (15:35 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-0@4016 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_agent.c

index c5dcc891e5084db3e99b3d3f21ca399d64c4d97f..6e8c3661ae4efc39ec90f2dc1d7fd9de8690d6e9 100755 (executable)
@@ -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)) {