Index: main/pbx.c =================================================================== --- main/pbx.c (revision 339503) +++ main/pbx.c (working copy) @@ -4939,6 +4939,9 @@ digit = ast_waitfordigit(c, waittime); if (c->_softhangup & AST_SOFTHANGUP_ASYNCGOTO) { ast_channel_clear_softhangup(c, AST_SOFTHANGUP_ASYNCGOTO); + ast_clear_flag(c,AST_FLAG_BRIDGE_HANGUP_DONT); + if( c->cdr && c->_state == AST_STATE_UP && !ast_check_hangup(c) ) + ast_cdr_answer(c->cdr); /* Channel in UP state returned to dialplan */ } else { if (!digit) /* No entry */ break; @@ -5010,6 +5013,9 @@ /* Check softhangup flags. */ if (c->_softhangup & AST_SOFTHANGUP_ASYNCGOTO) { ast_channel_clear_softhangup(c, AST_SOFTHANGUP_ASYNCGOTO); + ast_clear_flag(c,AST_FLAG_BRIDGE_HANGUP_DONT); + if( c->cdr && c->_state == AST_STATE_UP && !ast_check_hangup(c) ) + ast_cdr_answer(c->cdr); /* Channel in UP state returned to dialplan */ continue; } if (c->_softhangup & AST_SOFTHANGUP_TIMEOUT) { @@ -5077,6 +5083,9 @@ if (c->_softhangup & AST_SOFTHANGUP_ASYNCGOTO) { ast_channel_clear_softhangup(c, AST_SOFTHANGUP_ASYNCGOTO); + ast_clear_flag(c,AST_FLAG_BRIDGE_HANGUP_DONT); + if( c->cdr && c->_state == AST_STATE_UP && !ast_check_hangup(c) ) + ast_cdr_answer(c->cdr); /* Channel in UP state returned to dialplan */ continue; } if (c->_softhangup & AST_SOFTHANGUP_TIMEOUT) {