Module: kamailio
Branch: 4.3
Commit: 3969a72ebf47d9468ecfdf8c1ea3a4216b098ebf
URL: 
https://github.com/kamailio/kamailio/commit/3969a72ebf47d9468ecfdf8c1ea3a4216b098ebf

Author: Daniel-Constantin Mierla <[email protected]>
Committer: Daniel-Constantin Mierla <[email protected]>
Date: 2015-11-23T16:25:18+01:00

dmq: removed params field from dmq_node_t

- used only for setting a flag
- duplicating a node caused issues with param field not being
  duplicated, resulting in potential many free of same pointer, reported
  by Sebastian Damm

(cherry picked from commit 16bc7b726a21108458f354aea840cdbf5d89d6d8)

---

Modified: modules/dmq/dmqnode.c
Modified: modules/dmq/dmqnode.h
Modified: modules/dmq/notification_peer.c

---

Diff:  
https://github.com/kamailio/kamailio/commit/3969a72ebf47d9468ecfdf8c1ea3a4216b098ebf.diff
Patch: 
https://github.com/kamailio/kamailio/commit/3969a72ebf47d9468ecfdf8c1ea3a4216b098ebf.patch

---

diff --git a/modules/dmq/dmqnode.c b/modules/dmq/dmqnode.c
index 7b0bf63..f9816cb 100644
--- a/modules/dmq/dmqnode.c
+++ b/modules/dmq/dmqnode.c
@@ -185,20 +185,12 @@ dmq_node_t* build_dmq_node(str* uri, int shm) {
        }
        /* if any params found */
        if(params) {
-               if(shm) {
-                       if(shm_duplicate_params(&ret->params, params) < 0) {
-                               LM_ERR("error duplicating params\n");
-                               free_params(params);
-                               goto error;
-                       }
+               if(set_dmq_node_params(ret, params) < 0) {
                        free_params(params);
-               } else {
-                       ret->params = params;
-               }
-               if(set_dmq_node_params(ret, ret->params) < 0) {
                        LM_ERR("error setting parameters\n");
                        goto error;
                }
+               free_params(params);
        } else {
                LM_DBG("no dmqnode params found\n");            
        }
@@ -248,12 +240,8 @@ dmq_node_t* find_dmq_node_uri2(str* uri)
 void destroy_dmq_node(dmq_node_t* node, int shm)
 {
        if(shm) {
-               if (node->params!=NULL)
-                       shm_free_params(node->params);
                shm_free_node(node);
        } else {
-               if (node->params!=NULL)
-                       free_params(node->params);
                pkg_free_node(node);
        }
 }
diff --git a/modules/dmq/dmqnode.h b/modules/dmq/dmqnode.h
index 2ef7b5f..7bc7ff6 100644
--- a/modules/dmq/dmqnode.h
+++ b/modules/dmq/dmqnode.h
@@ -43,7 +43,6 @@ typedef struct dmq_node {
        str orig_uri; /* original uri string - e.g. 
sip:127.0.0.1:5060;passive=true */
        struct sip_uri uri; /* parsed uri string */
        struct ip_addr ip_address; /* resolved IP address */
-       param_t* params; /* uri parameters */
        int status; /* reserved - maybe something like active,timeout,disabled 
*/
        int last_notification; /* last notificatino receied from the node */
        struct dmq_node* next; /* pointer to the next struct dmq_node */
diff --git a/modules/dmq/notification_peer.c b/modules/dmq/notification_peer.c
index 3abefde..3bcff96 100644
--- a/modules/dmq/notification_peer.c
+++ b/modules/dmq/notification_peer.c
@@ -406,7 +406,7 @@ int extract_node_list(dmq_node_list_t* update_list, struct 
sip_msg* msg)
                        update_list->nodes = cur;
                        update_list->count++;
                        total_nodes++;
-               } else if (find->params && ret->status != find->status) {
+               } else if (find->uri.params.s && ret->status != find->status) {
                        LM_DBG("updating status on %.*s from %d to %d\n",
                                STR_FMT(&tmp_uri), ret->status, find->status);
                        ret->status = find->status;


_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to