diff options
author | (no author) <(no author)@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-01-20 04:02:58 +0000 |
---|---|---|
committer | (no author) <(no author)@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-01-20 04:02:58 +0000 |
commit | da648773e512f7764faed2c7dd5dc250be6b61b1 (patch) | |
tree | bad43da7b3b6ddcd5fe7e0e1aca0b501d4af5b58 /channels/chan_agent.c | |
parent | 27a9c96742202c8188b53a0173649de479256b69 (diff) |
This commit was manufactured by cvs2svn to create tag 'v1-0-4'.
git-svn-id: http://svn.digium.com/svn/asterisk/tags/v1-0-4@4850 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_agent.c')
-rwxr-xr-x | channels/chan_agent.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/channels/chan_agent.c b/channels/chan_agent.c index c5dcc891e..5d3781017 100755 --- a/channels/chan_agent.c +++ b/channels/chan_agent.c @@ -519,9 +519,26 @@ 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_mutex_lock(&usecnt_lock); + usecnt--; + ast_mutex_unlock(&usecnt_lock); + + 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)) { |