Index: channels/chan_sip.c =================================================================== --- channels/chan_sip.c (revision 7717) +++ channels/chan_sip.c (working copy) @@ -10565,6 +10565,7 @@ { struct ast_channel *c=NULL; int res; + int needhangup = 0; struct ast_channel *bridged_to; char iabuf[INET_ADDRSTRLEN]; @@ -10597,16 +10598,23 @@ ast_moh_stop(bridged_to); ast_async_goto(bridged_to, p->context, p->refer_to,1); } else - ast_queue_hangup(p->owner); - } + needhangup = 1; + } else + needhangup = 1; } else { ast_log(LOG_WARNING, "Invalid transfer information from '%s'\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->recv.sin_addr)); + needhangup = 1; + } + } else + needhangup = 1; + + if(needhangup) { + if (p->owner) ast_queue_hangup(p->owner); - } - } else if (p->owner) - ast_queue_hangup(p->owner); - else - ast_set_flag(p, SIP_NEEDDESTROY); + else + ast_set_flag(p, SIP_NEEDDESTROY); + } + transmit_response(p, "200 OK", req); return 1;