diff --git a/main/rtp_engine.c b/main/rtp_engine.c index 1ee8f55244..d5846b9323 100644 --- a/main/rtp_engine.c +++ b/main/rtp_engine.c @@ -1011,6 +1011,7 @@ void ast_rtp_codecs_payloads_destroy(struct ast_rtp_codecs *codecs) AST_VECTOR_FREE(&codecs->payload_mapping_tx); ao2_t_cleanup(codecs->preferred_format, "destroying ast_rtp_codec preferred format"); + codecs->preferred_format = NULL; ast_rwlock_destroy(&codecs->codecs_lock); } diff --git a/res/res_pjsip_sdp_rtp.c b/res/res_pjsip_sdp_rtp.c index aa6fc94dc3..98df545397 100644 --- a/res/res_pjsip_sdp_rtp.c +++ b/res/res_pjsip_sdp_rtp.c @@ -544,7 +544,10 @@ static int set_caps(struct ast_sip_session *session, ast_format_cap_get_names(caps, &usbuf), ast_format_cap_get_names(peer, &thembuf)); } else { - ast_rtp_codecs_set_preferred_format(&codecs, ast_format_cap_get_format(joint, 0)); + struct ast_format *preferred_fmt = ast_format_cap_get_format(joint, 0); + + ast_rtp_codecs_set_preferred_format(&codecs, preferred_fmt); + ao2_ref(preferred_fmt, -1); } if (is_offer) {