chan_sip: sip_subscribe_mwi_destroy should not call sip_destroy

sip_subscribe_mwi_destroy calls sip_destroy on the reference counted
mwi->call.  This results in the fields of mwi->call being freed, but
mwi->call itself it leaked.  If other code is still using mwi->call
it can cause problems.  This change uses dialog_unref instead, to
balance the ref provided by sip_alloc().

ASTERISK-24087 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/3834/
........

Merged revisions 419440 from http://svn.asterisk.org/svn/asterisk/branches/1.8


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@419441 65c4cc65-6c06-0410-ace0-fbb531ad65f3
changes/61/61/1
Corey Farrell 11 years ago
parent 9219a97997
commit aaa44d6ea5

@ -6450,9 +6450,9 @@ static void sip_subscribe_mwi_destroy(struct sip_subscription_mwi *mwi)
{ {
if (mwi->call) { if (mwi->call) {
mwi->call->mwi = NULL; mwi->call->mwi = NULL;
sip_destroy(mwi->call); mwi->call = dialog_unref(mwi->call, "sip_subscription_mwi destruction");
} }
AST_SCHED_DEL(sched, mwi->resub); AST_SCHED_DEL(sched, mwi->resub);
ast_string_field_free_memory(mwi); ast_string_field_free_memory(mwi);
ast_free(mwi); ast_free(mwi);

Loading…
Cancel
Save