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

rtpengine: Init and dealloc hastable locks

Right now only alloc and destroy is done. Also do init and dealloc.
Stefan Mititelu 9 жил өмнө
parent
commit
b6e2dce80a

+ 9 - 1
modules/rtpengine/rtpengine_hash.c

@@ -92,7 +92,7 @@ int rtpengine_hash_table_init(int size) {
 
 	// init hashtable  row_locks[i], row_entry_list[i] and row_totals[i]
 	for (i = 0; i < hash_table_size; i++) {
-		// init hashtable row_locks[i]
+		// alloc hashtable row_locks[i]
 		rtpengine_hash_table->row_locks[i] = lock_alloc();
 		if (!rtpengine_hash_table->row_locks[i]) {
 			LM_ERR("no shm left to create rtpengine_hash_table->row_locks[%d]\n", i);
@@ -100,6 +100,13 @@ int rtpengine_hash_table_init(int size) {
 			return 0;
 		}
 
+		// init hashtable row_locks[i]
+		if (!lock_init(rtpengine_hash_table->row_locks[i])) {
+			LM_ERR("fail to init rtpengine_hash_table->row_locks[%d]\n", i);
+			rtpengine_hash_table_destroy();
+			return 0;
+		}
+
 		// init hashtable row_entry_list[i]
 		rtpengine_hash_table->row_entry_list[i] = shm_malloc(sizeof(struct rtpengine_hash_entry));
 		if (!rtpengine_hash_table->row_entry_list[i]) {
@@ -511,6 +518,7 @@ static void rtpengine_hash_table_free_row_lock(gen_lock_t *row_lock) {
 	}
 
 	lock_destroy(row_lock);
+	lock_dealloc(row_lock);
 
 	return ;
 }