Module: kamailio
Branch: 5.0
Commit: 04e5d5e8cc8f9593e2cc809dabb5c6303e7c3214
URL:
https://github.com/kamailio/kamailio/commit/04e5d5e8cc8f9593e2cc809dabb5c63…
Author: Victor Seva <linuxmaniac(a)torreviejawireless.org>
Committer: Victor Seva <linuxmaniac(a)torreviejawireless.org>
Date: 2017-02-22T08:16:25+01:00
pua_reginfo: fix memory leak when usrloc is DB_ONLY
As release_urecord() clearly says:
/*!
* \brief Release urecord previously obtained through get_urecord
* \warning Failing to calls this function after get_urecord will
* result in a memory leak when the DB_ONLY mode is used. When
* the records is later deleted, e.g. with delete_urecord, then
* its not necessary, as this function already releases the record.
* \param _r released record
*/
(cherry picked from commit 1b0e1c3cbdd162fcd438a7d9bb412ddce73bc214)
---
Modified: src/modules/pua_reginfo/notify.c
Modified: src/modules/pua_reginfo/usrloc_cb.c
---
Diff:
https://github.com/kamailio/kamailio/commit/04e5d5e8cc8f9593e2cc809dabb5c63…
Patch:
https://github.com/kamailio/kamailio/commit/04e5d5e8cc8f9593e2cc809dabb5c63…
---
diff --git a/src/modules/pua_reginfo/notify.c b/src/modules/pua_reginfo/notify.c
index 317f3e8..853dbcc 100644
--- a/src/modules/pua_reginfo/notify.c
+++ b/src/modules/pua_reginfo/notify.c
@@ -458,7 +458,7 @@ int process_body(str notify_body, udomain_t * domain) {
}
}
next_registration:
- // if (ul_record) ul.release_urecord(ul_record);
+ if (ul_record) ul.release_urecord(ul_record);
/* Unlock the domain for this AOR: */
if (aor_key.len > 0)
ul.unlock_udomain(domain, &aor_key);
diff --git a/src/modules/pua_reginfo/usrloc_cb.c b/src/modules/pua_reginfo/usrloc_cb.c
index 7f84788..3e00a0e 100644
--- a/src/modules/pua_reginfo/usrloc_cb.c
+++ b/src/modules/pua_reginfo/usrloc_cb.c
@@ -223,7 +223,7 @@ void reginfo_usrloc_cb(ucontact_t* c, int type, void* param) {
publ_info_t publ;
str content_type;
udomain_t * domain;
- urecord_t * record;
+ urecord_t * record = NULL;
int res;
str uri = {NULL, 0};
str user = {NULL, 0};
@@ -332,6 +332,7 @@ void reginfo_usrloc_cb(ucontact_t* c, int type, void* param) {
if(body->s) xmlFree(body->s);
pkg_free(body);
}
+ if(record) ul.release_urecord(record);
return;
}