{
zap_set_sflag_locked(zchan, SFLAG_HANGUP);
- if (zap_test_sflag(zchan, SFLAG_SENT_FINAL_MSG)) {
+ if (zap_test_sflag(zchan, SFLAG_SENT_FINAL_MSG) || zap_test_sflag(zchan, SFLAG_TERMINATING)) {
zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_HANGUP_COMPLETE);
} else {
zap_set_sflag_locked(zchan, SFLAG_SENT_FINAL_MSG);
zap_set_sflag_locked(zchan, SFLAG_TERMINATING);
sig.event_id = ZAP_SIGEVENT_STOP;
status = zap_span_send_signal(zchan->span, &sig);
- zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_HANGUP_COMPLETE);
}
break;
default:
ZSD_OUTBOUND,
ZSM_UNACCEPTABLE,
{ZAP_CHANNEL_STATE_HANGUP, ZAP_CHANNEL_STATE_TERMINATING, ZAP_END},
- {ZAP_CHANNEL_STATE_HANGUP_COMPLETE, ZAP_END}
+ {ZAP_CHANNEL_STATE_HANGUP_COMPLETE, ZAP_CHANNEL_STATE_HANGUP, ZAP_END}
},
{
ZSD_OUTBOUND,