From 613059e270dd69139492aa687da4e3a40437d70d Mon Sep 17 00:00:00 2001 From: Mark Michelson Date: Thu, 12 Jul 2007 23:00:32 +0000 Subject: [PATCH] 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 --- channels/chan_agent.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/channels/chan_agent.c b/channels/chan_agent.c index 9a87b6f882..4675ffdd6f 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);