[SR-Users] Keep-Alive in dialog "freeing a free fragment"

Dirk Teurlings - SIGNET B.V. dteurlings at signet.nl
Tue Jun 16 13:59:50 CEST 2015


Hello,

Following up on this issue, though KA seems to work fine now. We're 
running into another problem. We use a fork of CNXCC that terminates all 
calls when the user doesn't have enough credit. But with these patches 
that doesn't work anymore and the current thread even locks up completely.


We've tracked it down to these changes:

diff --git a/modules/dialog/dlg_req_within.c 
b/modules/dialog/dlg_req_within.c
index 206d13e..5668c3c 100644
--- a/modules/dialog/dlg_req_within.c
+++ b/modules/dialog/dlg_req_within.c
@@ -214,7 +214,7 @@ void bye_reply_cb(struct cell* t, int type, struct 
tmcb_params* ps){
                         unref++;
                 }
                 /* dialog terminated (BYE) */
-               run_dlg_callbacks( DLGCB_TERMINATED, dlg, ps->req, 
ps->rpl, DLG_DIR_NONE, 0);
+               run_dlg_callbacks( DLGCB_TERMINATED_CONFIRMED, dlg, 
ps->req, ps->rpl, DLG_DIR_NONE, 0);

                 LM_DBG("first final reply\n");
                 /* derefering the dialog */
@@ -521,6 +525,9 @@ int dlg_bye_all(struct dlg_cell *dlg, str *hdrs)
         str all_hdrs = { 0, 0 };
         int ret;

+       /* run dialog terminated callbacks */
+       run_dlg_callbacks( DLGCB_TERMINATED, dlg, NULL, NULL, 
DLG_DIR_NONE, 0);
+
         if ((build_extra_hdr(dlg, hdrs, &all_hdrs)) != 0)
         {
                 LM_ERR("failed to build dlg headers\n");





This is a diff between 4.2.3 and 4.2.5, once reverted, everthing works fine.

Can you tell me the reason for these additions? What is the expected 
difference in behaviour?


Cheers,
Dirk


On 12-05-15 10:49, Daniel-Constantin Mierla wrote:
> Hello,
>
> master is still the code to be 4.3, we will make a dedicated branch
> sometime soon.
>
> The patch will be backported to 4.2 as well. Thanks for helping to
> troubleshoot and testing.
>
> Cheers,
> Daniel
>



More information about the sr-users mailing list