Module: kamailio
Branch: master
Commit: a4c5af2df65a2711ea7f0fd97e7d9b8e65461a4b
URL:
https://github.com/kamailio/kamailio/commit/a4c5af2df65a2711ea7f0fd97e7d9b8…
Author: Stefan Mititelu <stefan.mititelu(a)1and1.ro>
Committer: Stefan Mititelu <stefan.mititelu(a)1and1.ro>
Date: 2016-02-23T10:08:56+02:00
rtpengine: Delete all entries if viabranch.len==0
- try to delete all (callid, viabranchX/Y..) hashtable entries when
rtpengine_delete() is called with viabranch.len==0
- release lock before returning
---
Modified: modules/rtpengine/rtpengine_hash.c
---
Diff:
https://github.com/kamailio/kamailio/commit/a4c5af2df65a2711ea7f0fd97e7d9b8…
Patch:
https://github.com/kamailio/kamailio/commit/a4c5af2df65a2711ea7f0fd97e7d9b8…
---
diff --git a/modules/rtpengine/rtpengine_hash.c b/modules/rtpengine/rtpengine_hash.c
index 66f1cb1..5821fe8 100644
--- a/modules/rtpengine/rtpengine_hash.c
+++ b/modules/rtpengine/rtpengine_hash.c
@@ -302,21 +302,30 @@ int rtpengine_hash_table_remove(str callid, str viabranch, enum
rtpe_operation o
// if callid found, delete entry
if ((str_equal(entry->callid, callid) && str_equal(entry->viabranch,
viabranch)) ||
(str_equal(entry->callid, callid) && viabranch.len == 0 && op ==
OP_DELETE)) {
- // free entry
+ // set pointers; exclude entry
last_entry->next = entry->next;
+
+ // free current entry; entry points to unknown
rtpengine_hash_table_free_entry(entry);
+ // set pointers
+ entry = last_entry;
+
// update total
rtpengine_hash_table->row_totals[hash_index]--;
- // unlock
- lock_release(rtpengine_hash_table->row_locks[hash_index]);
-
found = 1;
if (!(viabranch.len == 0 && op == OP_DELETE)) {
+ // unlock
+ lock_release(rtpengine_hash_table->row_locks[hash_index]);
return found;
}
+
+ // try to also delete other viabranch entries for callid
+ last_entry = entry;
+ entry = entry->next;
+ continue;
}
// if expired entry discovered, delete it