diff -urN asterisk-1.2.18.orig/channels/chan_agent.c asterisk-1.2.18/channels/chan_agent.c --- asterisk-1.2.18.orig/channels/chan_agent.c 2007-03-01 03:55:45.000000000 +0900 +++ asterisk-1.2.18/channels/chan_agent.c 2007-07-11 16:30:19.580457744 +0900 @@ -1996,6 +1996,8 @@ ast_device_state_changed("Agent/%s", p->agent); while (res >= 0) { ast_mutex_lock(&p->lock); + if (!p->loginstart && p->chan) + ast_softhangup(p->chan, AST_SOFTHANGUP_EXPLICIT); if (p->chan != chan) res = -1; ast_mutex_unlock(&p->lock);