From 59e8656698ec148fa5ddfeeb68cbea2309374eae Mon Sep 17 00:00:00 2001
From: Anthony Minessale <anthony.minessale@gmail.com>
Date: Wed, 12 Dec 2007 14:16:24 +0000
Subject: [PATCH] add missing code to free pools in certian conditions that
 were overlooked

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@6699 d0543943-73ff-0310-b7d9-9358b9ac24b2
---
 src/switch_core_asr.c       | 10 +++++++++-
 src/switch_core_directory.c | 10 +++++++++-
 src/switch_core_file.c      |  9 ++++++++-
 3 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/src/switch_core_asr.c b/src/switch_core_asr.c
index 71fdd2f4cb..2498091fde 100644
--- a/src/switch_core_asr.c
+++ b/src/switch_core_asr.c
@@ -125,9 +125,17 @@ SWITCH_DECLARE(switch_status_t) switch_core_asr_resume(switch_asr_handle_t *ah)
 
 SWITCH_DECLARE(switch_status_t) switch_core_asr_close(switch_asr_handle_t *ah, switch_asr_flag_t *flags)
 {
+	switch_status_t status;
+
 	switch_assert(ah != NULL);
 
-	return ah->asr_interface->asr_close(ah, flags);
+	status = ah->asr_interface->asr_close(ah, flags);
+
+	if (switch_test_flag(ah, SWITCH_ASR_FLAG_FREE_POOL)) {
+		switch_core_destroy_memory_pool(&ah->memory_pool);
+	}
+
+	return status;
 }
 
 SWITCH_DECLARE(switch_status_t) switch_core_asr_feed(switch_asr_handle_t *ah, void *data, unsigned int len, switch_asr_flag_t *flags)
diff --git a/src/switch_core_directory.c b/src/switch_core_directory.c
index 362f78ae05..8ee3d75ee9 100644
--- a/src/switch_core_directory.c
+++ b/src/switch_core_directory.c
@@ -73,6 +73,14 @@ SWITCH_DECLARE(switch_status_t) switch_core_directory_next_pair(switch_directory
 
 SWITCH_DECLARE(switch_status_t) switch_core_directory_close(switch_directory_handle_t *dh)
 {
-	return dh->directory_interface->directory_close(dh);
+	switch_status_t status;
+
+	status = dh->directory_interface->directory_close(dh);
+
+	if (switch_test_flag(dh, SWITCH_DIRECTORY_FLAG_FREE_POOL)) {
+		switch_core_destroy_memory_pool(&dh->memory_pool);
+	}
+
+	return status;
 }
 
diff --git a/src/switch_core_file.c b/src/switch_core_file.c
index 2038fd33a6..b8242757a1 100644
--- a/src/switch_core_file.c
+++ b/src/switch_core_file.c
@@ -143,10 +143,17 @@ SWITCH_DECLARE(switch_status_t) switch_core_file_get_string(switch_file_handle_t
 
 SWITCH_DECLARE(switch_status_t) switch_core_file_close(switch_file_handle_t *fh)
 {
+	switch_status_t status;
+
 	switch_assert(fh != NULL);
 	switch_assert(fh->file_interface != NULL);
 
 	switch_clear_flag(fh, SWITCH_FILE_OPEN);
-	return fh->file_interface->file_close(fh);
+	status = fh->file_interface->file_close(fh);
 
+	if (switch_test_flag(fh, SWITCH_FILE_FLAG_FREE_POOL)) {
+		switch_core_destroy_memory_pool(&fh->memory_pool);
+	}
+
+	return status;
 }