aboutsummaryrefslogtreecommitdiffstats
path: root/channels/chan_agent.c
diff options
context:
space:
mode:
authormmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b>2007-07-12 23:00:32 +0000
committermmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b>2007-07-12 23:00:32 +0000
commit1afa2a4d550e380ce5a268dfe842308b3f4fba94 (patch)
tree1ba06ecd34c87192244a0b112ebd176a1f047072 /channels/chan_agent.c
parent12e8c6e39212b06bcbe0dad55d4adece25112c25 (diff)
Change to my previous fix regarding agent logoff soft. Now uses deferlogoff instead of loginstart
since loginstart is used after logoff. Thanks to makoto for pointing this out and suggesting the fix. (closes issue #10178, reported and patched by makoto, with modification by me) git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@74998 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_agent.c')
-rw-r--r--channels/chan_agent.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/channels/chan_agent.c b/channels/chan_agent.c
index 9a87b6f88..4675ffdd6 100644
--- a/channels/chan_agent.c
+++ b/channels/chan_agent.c
@@ -1528,18 +1528,18 @@ static int agent_logoff(const char *agent, int soft)
if (!strcasecmp(p->agent, agent)) {
ret = 0;
if (p->owner || p->chan) {
- p->deferlogoff = 1;
if (!soft) {
if (p->owner)
ast_softhangup(p->owner, AST_SOFTHANGUP_EXPLICIT);
if (p->chan)
ast_softhangup(p->chan, AST_SOFTHANGUP_EXPLICIT);
- }
+ } else
+ p->deferlogoff = 1;
} else {
logintime = time(NULL) - p->loginstart;
+ p->loginstart = 0;
agent_logoff_maintenance(p, p->loginchan, logintime, NULL, "CommandLogoff");
}
- p->loginstart = 0;
break;
}
}
@@ -2071,8 +2071,10 @@ static int __login_exec(struct ast_channel *chan, void *data, int callbackmode)
ast_device_state_changed("Agent/%s", p->agent);
while (res >= 0) {
ast_mutex_lock(&p->lock);
- if (!p->loginstart && p->chan)
+ if (p->deferlogoff && p->chan) {
ast_softhangup(p->chan, AST_SOFTHANGUP_EXPLICIT);
+ p->deferlogoff = 0;
+ }
if (p->chan != chan)
res = -1;
ast_mutex_unlock(&p->lock);