Module: sip-router Branch: tmp/tm_async_reply_support Commit: 15d013a5a09899989f7e321c45cafade3768e268 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=15d013a5...
Author: Richard Good richard.good@smilecoms.com Committer: Richard Good richard.good@smilecoms.com Date: Tue Mar 19 12:56:09 2013 +0200
tm: fix memory bug where transaction not unrefed
-Fixed memory bug in t_suspend.c where transaction must be unreffed.
---
modules/tm/t_suspend.c | 19 ++++++++++++++++--- 1 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/modules/tm/t_suspend.c b/modules/tm/t_suspend.c index 565f624..4754f32 100644 --- a/modules/tm/t_suspend.c +++ b/modules/tm/t_suspend.c @@ -358,8 +358,15 @@ int t_continue(unsigned int hash_index, unsigned int label, } t->uac[branch].request.flags|=F_RB_REPLIED; // - if (reply_status==RPS_ERROR) - goto done; + if (reply_status==RPS_ERROR){ + LOG(L_DBG,"Unreffing the transaction"); + /* unref the transaction */ + t_unref(t->uac[branch].reply); + + sip_msg_free(t->uac[branch].reply); + t->uac[branch].reply = 0; + goto done; + } // // /* update FR/RETR timers on provisional replies */
@@ -375,6 +382,12 @@ int t_continue(unsigned int hash_index, unsigned int label, t->uac[branch].request.flags|=F_RB_FR_INV; /* mark fr_inv */ }
+ LOG(L_DBG,"Unreffing the transaction"); + /* unref the transaction */ + t_unref(t->uac[branch].reply); + + + LOG(L_DBG,"Freeing earlier cloned reply"); sip_msg_free(t->uac[branch].reply); t->uac[branch].reply = 0;
@@ -383,7 +396,7 @@ int t_continue(unsigned int hash_index, unsigned int label, }
done: - return 0; + return 0;
kill_trans: /* The script has hopefully set the error code. If not,