Module: kamailio Branch: master Commit: 16c8d5e4648ff340e6043f4a38fd57c5c60a3058 URL: https://github.com/kamailio/kamailio/commit/16c8d5e4648ff340e6043f4a38fd57c5...
Author: jaybeepee jason.penton@gmail.com Committer: jaybeepee jason.penton@gmail.com Date: 2016-02-29T14:17:17+02:00
ims_dialog: fix small refcount bug
---
Modified: modules/ims_dialog/dlg_hash.c Modified: modules/ims_dialog/dlg_req_within.c Modified: modules/ims_dialog/ims_dialog.c
---
Diff: https://github.com/kamailio/kamailio/commit/16c8d5e4648ff340e6043f4a38fd57c5... Patch: https://github.com/kamailio/kamailio/commit/16c8d5e4648ff340e6043f4a38fd57c5...
---
diff --git a/modules/ims_dialog/dlg_hash.c b/modules/ims_dialog/dlg_hash.c index 01a51f5..26817ac 100644 --- a/modules/ims_dialog/dlg_hash.c +++ b/modules/ims_dialog/dlg_hash.c @@ -1107,25 +1107,9 @@ void next_state_dlg(struct dlg_cell *dlg, int event, switch (dlg->state) { case DLG_STATE_UNCONFIRMED: case DLG_STATE_EARLY: -// if (to_tag) { -// LM_DBG("Going to check if there is another active branch - we only change state to DELETED if there are no other active branches\n"); -// while (dlg_out) { -// if (dlg_out->to_tag.len == to_tag->len && memcmp(dlg_out->to_tag.s, to_tag->s, dlg_out->to_tag.len) == 0) { -// dlg_out->deleted=1; -// } else { -// if (dlg_out->deleted != 1) { -// LM_DBG("Found a dlg_out (to-tag: [%.*s]) that is not for this event and is not in state deleted, therefore there is another active branch\n", to_tag->len, to_tag->s); -// delete = 0; -// } -// } -// dlg_out = dlg_out->next; -// } -// } - if (delete) { - dlg->state = DLG_STATE_DELETED; - unref_dlg_unsafe(dlg, 1, d_entry); - *unref = 1; - } + // dlg->state = DLG_STATE_DELETED; + unref_dlg_unsafe(dlg, 1, d_entry); + // *unref = 1; break; case DLG_STATE_CONFIRMED: case DLG_STATE_CONFIRMED_NA: diff --git a/modules/ims_dialog/dlg_req_within.c b/modules/ims_dialog/dlg_req_within.c index e8b3ffd..b66ae6b 100644 --- a/modules/ims_dialog/dlg_req_within.c +++ b/modules/ims_dialog/dlg_req_within.c @@ -212,7 +212,7 @@ void bye_reply_cb(struct cell* t, int type, struct tmcb_params* ps) { run_dlg_callbacks(DLGCB_TERMINATED, dlg, ps->req, ps->rpl, DLG_DIR_NONE, 0);
/* derefering the dialog */ - unref_dlg(dlg, unref + 1); + unref_dlg(dlg, unref); /*removed the extra +1 on the unref that is usually added in the unref of next_state_dlg */ }
if (new_state == DLG_STATE_DELETED && old_state == DLG_STATE_DELETED) { diff --git a/modules/ims_dialog/ims_dialog.c b/modules/ims_dialog/ims_dialog.c index 94c84e6..8fc37e7 100644 --- a/modules/ims_dialog/ims_dialog.c +++ b/modules/ims_dialog/ims_dialog.c @@ -130,7 +130,7 @@ static param_export_t mod_params[] = { { "default_timeout", INT_PARAM, &default_timeout}, { "dlg_extra_hdrs", PARAM_STR, &dlg_extra_hdrs}, //In this new dialog module we always match using DID - //{ "dlg_match_mode", INT_PARAM, &seq_match_mode}, + { "dlg_match_mode", INT_PARAM, &seq_match_mode},
{ "db_url", PARAM_STR, &db_url }, { "db_mode", INT_PARAM, &dlg_db_mode_param }, @@ -943,7 +943,6 @@ static void rpc_end_dlg_entry_id(rpc_t *rpc, void *c) { if(rpc->scan(c, "*S", &rpc_extra_hdrs)<1) { rpc_extra_hdrs = dfl_rpc_extra_hdrs; - rpc_extra_hdrs.len = 0; }
dlg = lookup_dlg(h_entry, h_id);//increments ref count!