diff --git a/src/switch_ivr_async.c b/src/switch_ivr_async.c index 2cf836b04a..2557cda0d8 100644 --- a/src/switch_ivr_async.c +++ b/src/switch_ivr_async.c @@ -495,6 +495,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_eavesdrop_session(switch_core_session switch_status_t status = SWITCH_STATUS_FALSE; switch_channel_t *channel = switch_core_session_get_channel(session); switch_codec_t *read_codec = switch_core_session_get_read_codec(session); + int codec_initialized = 0; if ((tsession = switch_core_session_locate(uuid))) { struct eavesdrop_pvt *ep = NULL; @@ -554,6 +555,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_eavesdrop_session(switch_core_session goto end; } + codec_initialized = 1; + switch_core_session_set_read_codec(session, &codec); write_frame.codec = &codec; write_frame.data = buf; @@ -683,8 +686,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_eavesdrop_session(switch_core_session } end: - - switch_core_codec_destroy(&codec); + if ( codec_initialized ) + switch_core_codec_destroy(&codec); if (bug) { switch_core_media_bug_remove(tsession, &bug);