--- asterisk-issue8824-2009-01-29/channels/chan_dahdi.c 2009-09-09 15:24:04.000000000 +0200 +++ asterisk-issue8824-2009-01-29.new/channels/chan_dahdi.c 2009-09-10 14:46:55.000000000 +0200 @@ -13325,7 +13325,7 @@ else if (pri->pvts[chanpos]->owner) { /* Queue a BUSY instead of a hangup if our cause is appropriate */ pri->pvts[chanpos]->owner->hangupcause = e->hangup.cause; - if (pri->pvts[chanpos]->owner->_state == AST_STATE_UP) + if (pri->pvts[chanpos]->owner->_state == AST_STATE_UP || pri->pvts[chanpos]->owner->_state == AST_STATE_BUSY) pri->pvts[chanpos]->owner->_softhangup |= AST_SOFTHANGUP_DEV; else { switch (e->hangup.cause) { @@ -13411,7 +13411,7 @@ pri_hangup_all(pri->pvts[chanpos]->realcall, pri); else if (pri->pvts[chanpos]->owner) { pri->pvts[chanpos]->owner->hangupcause = e->hangup.cause; - if (pri->pvts[chanpos]->owner->_state == AST_STATE_UP) + if (pri->pvts[chanpos]->owner->_state == AST_STATE_UP || pri->pvts[chanpos]->owner->_state == AST_STATE_BUSY) pri->pvts[chanpos]->owner->_softhangup |= AST_SOFTHANGUP_DEV; else { switch (e->hangup.cause) {