2
0
Эх сурвалжийг харах

Fixed a memory leak on shm memory, caused by the dtrie implementation.

 dtrie_destroy and dtrie_clear could leak 10 * sizeof(void*) for each node in the trie.
Mainly affected carrierroute and userblacklist modules
(cherry picked from commit 5c5cc3df5301e86ee78d79f52aa917e0f67f37e8)
Marius Zbihlei 15 жил өмнө
parent
commit
5146c47626
1 өөрчлөгдсөн 5 нэмэгдсэн , 1 устгасан
  1. 5 1
      lib/trie/dtrie.c

+ 5 - 1
lib/trie/dtrie.c

@@ -88,10 +88,13 @@ void dtrie_delete(struct dtrie_node_t *root, struct dtrie_node_t *node,
 	if (delete_payload) {
 		delete_payload(node->data);
 	}
+
 	node->data = NULL;
-	
+
 	if (node != root) {
 		LM_DBG("free node at %p\n", node);
+		shm_free(node->child);
+		node->child = NULL;
 		shm_free(node);
 	}
 }
@@ -102,6 +105,7 @@ void dtrie_destroy(struct dtrie_node_t **root, dt_delete_func_t delete_payload,
 	if ((root!=NULL) && (*root!=NULL)) {
 		dtrie_delete(*root, *root, delete_payload, branches);
 		LM_DBG("free root at %p\n", root);
+		shm_free((*root)->child);
 		shm_free(*root);
 		*root = NULL;
 	}