Skip to content
This repository has been archived by the owner on Jan 14, 2020. It is now read-only.

Commit

Permalink
chan_sip.c: Moved some sip_pvt unrefs after their last use.
Browse files Browse the repository at this point in the history
* Moved sip_pvt unref in ast_hangup() and handle_request_do() to the end
of the function.  The unref needs to happen after the last use of the
pointer.
........

Merged revisions 412348 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 412383 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: http://svn.asterisk.org/svn/asterisk/trunk@412384 f38db490-d61c-443f-a65b-d21fe96a405b
  • Loading branch information
rmudgett9125 committed Apr 15, 2014
1 parent c489434 commit be96135
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions channels/chan_sip.c
Original file line number Diff line number Diff line change
Expand Up @@ -7154,10 +7154,11 @@ static int sip_hangup(struct ast_channel *ast)
sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT);
ast_clear_flag(&p->flags[0], SIP_DEFER_BYE_ON_TRANSFER); /* Really hang up next time */
if (p->owner) {
ast_channel_tech_pvt_set(p->owner, dialog_unref(ast_channel_tech_pvt(p->owner), "unref p->owner->tech_pvt"));
sip_pvt_lock(p);
oldowner = p->owner;
sip_set_owner(p, NULL); /* Owner will be gone after we return, so take it away */
sip_pvt_unlock(p);
ast_channel_tech_pvt_set(oldowner, dialog_unref(ast_channel_tech_pvt(oldowner), "unref oldowner->tech_pvt"));
}
ast_module_unref(ast_module_info->self);
return 0;
Expand Down Expand Up @@ -7193,7 +7194,7 @@ static int sip_hangup(struct ast_channel *ast)
disable_dsp_detect(p);

sip_set_owner(p, NULL);
ast_channel_tech_pvt_set(ast, dialog_unref(ast_channel_tech_pvt(ast), "unref ast->tech_pvt"));
ast_channel_tech_pvt_set(ast, NULL);

ast_module_unref(ast_module_info->self);
/* Do not destroy this pvt until we have timeout or
Expand Down Expand Up @@ -7331,6 +7332,7 @@ static int sip_hangup(struct ast_channel *ast)
pvt_set_needdestroy(p, "hangup");
}
sip_pvt_unlock(p);
dialog_unref(p, "unref ast->tech_pvt");
return 0;
}

Expand Down Expand Up @@ -28259,12 +28261,12 @@ static int handle_request_do(struct sip_request *req, struct ast_sockaddr *addr)
ast_channel_unref(owner_chan_ref);
}
sip_pvt_unlock(p);
ao2_t_ref(p, -1, "throw away dialog ptr from find_call at end of routine"); /* p is gone after the return */
ast_mutex_unlock(&netlock);

if (p->logger_callid) {
ast_callid_threadassoc_remove();
}
ao2_t_ref(p, -1, "throw away dialog ptr from find_call at end of routine"); /* p is gone after the return */

return 1;
}
Expand Down

0 comments on commit be96135

Please sign in to comment.