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: https://origsvn.digium.com/svn/asterisk/branches/1.4@74998 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Mark Michelson
2007-07-12 23:00:32 +00:00
parent 2aab6c341f
commit 613059e270

View File

@@ -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);