aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-10-16 15:01:59 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-10-16 15:01:59 +0000
commit1f61a35de29fe888be622b1b7a5690a794695e0e (patch)
tree41508eba47fe1edbccd02ccc344900106b6cc2c6
parent35ae1026e7466c4f70a605cc366724637c33aa04 (diff)
Fix hangup handling with chansiavail with agent (bug #2658)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@4015 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-xchannels/chan_agent.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/channels/chan_agent.c b/channels/chan_agent.c
index 97e5f1534..2246bf900 100755
--- a/channels/chan_agent.c
+++ b/channels/chan_agent.c
@@ -525,9 +525,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)) {