diff --git a/src/mod/endpoints/mod_portaudio/mod_portaudio.c b/src/mod/endpoints/mod_portaudio/mod_portaudio.c index 68d340c67c..4b4449acf9 100644 --- a/src/mod/endpoints/mod_portaudio/mod_portaudio.c +++ b/src/mod/endpoints/mod_portaudio/mod_portaudio.c @@ -823,7 +823,11 @@ static switch_status_t engage_device(struct private_object *tech_pvt) } else { switch_core_codec_destroy(&tech_pvt->read_codec); switch_core_codec_destroy(&tech_pvt->write_codec); - switch_core_session_destroy(&tech_pvt->session); + if (switch_core_session_running(tech_pvt->session)) { + switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); + } else { + switch_core_session_destroy(&tech_pvt->session); + } } return SWITCH_STATUS_FALSE; diff --git a/src/switch_ivr.c b/src/switch_ivr.c index 4a6d76ff79..2eec41403d 100644 --- a/src/switch_ivr.c +++ b/src/switch_ivr.c @@ -2101,6 +2101,9 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess if (idx == IDX_CANCEL) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Originate Cancelled by originator termination Cause: %d [%s]\n", *cause, switch_channel_cause2str(*cause)); + if (peer_channel) { + switch_channel_hangup(peer_channel, SWITCH_CAUSE_ORIGINATOR_CANCEL); + } } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Originate Resulted in Error Cause: %d [%s]\n", *cause, switch_channel_cause2str(*cause));