From e76d7d925ea6ffc804e1971b1e2a178f63513669 Mon Sep 17 00:00:00 2001
From: Mathieu Rene <mrene@avgs.ca>
Date: Tue, 13 Jul 2010 19:04:41 -0400
Subject: [PATCH] mod_hash: free all hashtables on shutdown

---
 src/mod/applications/mod_hash/mod_hash.c | 27 ++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/src/mod/applications/mod_hash/mod_hash.c b/src/mod/applications/mod_hash/mod_hash.c
index eb02e5104a..8179690928 100644
--- a/src/mod/applications/mod_hash/mod_hash.c
+++ b/src/mod/applications/mod_hash/mod_hash.c
@@ -486,8 +486,35 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_hash_load)
 
 SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_hash_shutdown)
 {
+	switch_hash_index_t *hi = NULL;
+	
 	switch_scheduler_del_task_group("mod_hash");
 
+	switch_thread_rwlock_wrlock(globals.limit_hash_rwlock);
+	switch_thread_rwlock_wrlock(globals.db_hash_rwlock);
+	
+	while ((hi = switch_hash_first(NULL, globals.limit_hash))) {
+		void *val = NULL;
+		const void *key;
+		switch_ssize_t keylen;
+		switch_hash_this(hi, &key, &keylen, &val);
+		free(val);
+		switch_core_hash_delete(globals.limit_hash, key);
+	}
+	
+	while ((hi = switch_hash_first(NULL, globals.db_hash))) {
+		void *val = NULL;
+		const void *key;
+		switch_ssize_t keylen;
+		switch_hash_this(hi, &key, &keylen, &val);
+		free(val);
+		switch_core_hash_delete(globals.db_hash, key);
+	}
+	
+
+	switch_thread_rwlock_unlock(globals.limit_hash_rwlock);
+	switch_thread_rwlock_unlock(globals.db_hash_rwlock);
+
 	switch_thread_rwlock_destroy(globals.db_hash_rwlock);
 	switch_thread_rwlock_destroy(globals.limit_hash_rwlock);