Module: kamailio
Branch: master
Commit: b97bb77265e7bfc5562a664e8a510692ed68b2f8
URL: 
https://github.com/kamailio/kamailio/commit/b97bb77265e7bfc5562a664e8a510692ed68b2f8

Author: Victor Seva <[email protected]>
Committer: Henning Westerholt <[email protected]>
Date: 2019-07-02T21:41:59+02:00

usrloc: fix memory leak on DB_ONLY mode on RPC commands

---

Modified: src/modules/usrloc/ul_rpc.c

---

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

---

diff --git a/src/modules/usrloc/ul_rpc.c b/src/modules/usrloc/ul_rpc.c
index 3afad823d9..0f87230697 100644
--- a/src/modules/usrloc/ul_rpc.c
+++ b/src/modules/usrloc/ul_rpc.c
@@ -421,6 +421,7 @@ static void ul_rpc_lookup(rpc_t* rpc, void* ctx)
 
        if (rpc->add(ctx, "{", &th) < 0)
        {
+               release_urecord(rec);
                unlock_udomain(dom, &aor);
                rpc->fault(ctx, 500, "Internal error creating outer rpc");
                return;
@@ -429,6 +430,7 @@ static void ul_rpc_lookup(rpc_t* rpc, void* ctx)
                                "AoR", &aor,
                                "Contacts", &ih)<0)
        {
+               release_urecord(rec);
                unlock_udomain(dom, &aor);
                rpc->fault(ctx, 500, "Internal error creating aor struct");
                return;
@@ -439,12 +441,13 @@ static void ul_rpc_lookup(rpc_t* rpc, void* ctx)
                if (VALID_CONTACT( con, act_time)) {
                        rpl_tree++;
                        if (rpc_dump_contact(rpc, ctx, ih, con) == -1) {
+                               release_urecord(rec);
                                unlock_udomain(dom, &aor);
                                return;
                        }
                }
        }
-
+       release_urecord(rec);
        unlock_udomain( dom, &aor);
 
        if (rpl_tree==0) {
@@ -533,17 +536,20 @@ static void ul_rpc_rm_contact(rpc_t* rpc, void* ctx)
 
        ret = get_ucontact( rec, &contact, &rpc_ul_cid, &rpc_ul_path, 
RPC_UL_CSEQ+1, &con);
        if (ret < 0) {
+               release_urecord(rec);
                unlock_udomain( dom, &aor);
                rpc->fault(ctx, 500, "Internal error (can't get contact)");
                return;
        }
        if (ret > 0) {
+               release_urecord(rec);
                unlock_udomain( dom, &aor);
                rpc->fault(ctx, 404, "Contact not found");
                return;
        }
 
        if (delete_ucontact(rec, con) < 0) {
+               release_urecord(rec);
                unlock_udomain( dom, &aor);
                rpc->fault(ctx, 500, "Internal error (can't delete contact)");
                return;


_______________________________________________
Kamailio (SER) - Development Mailing List
[email protected]
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to