Revision
17023
Author
anthm
Date
2010-03-17 08:59:27 -0500 (Wed, 17 Mar 2010)

Log Message

FSCORE-574

Modified Paths

Diff

Modified: freeswitch/trunk/src/mod/applications/mod_fifo/mod_fifo.c (17022 => 17023)


--- freeswitch/trunk/src/mod/applications/mod_fifo/mod_fifo.c	2010-03-17 12:52:08 UTC (rev 17022)
+++ freeswitch/trunk/src/mod/applications/mod_fifo/mod_fifo.c	2010-03-17 13:59:27 UTC (rev 17023)
@@ -881,7 +881,7 @@
 		node_list[node_count++] = node;
 	}
 
-	if (switch_true(switch_channel_get_variable(channel, "fifo_destroy_after_use"))) {
+	if (switch_true(switch_channel_get_variable(channel, "fifo_destroy_after_use")) && node->ready == 1) {
 		node->ready = FIFO_DELAY_DESTROY;
 	}
 
@@ -1588,12 +1588,17 @@
 
 	switch_mutex_lock(globals.mutex);
 	if (node && node->ready == FIFO_DELAY_DESTROY && node->consumer_count == 0 && node->caller_count == 0) {
-		switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_NOTICE, "%s removed. (delayed)\n", node->name);
+		switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_NOTICE, "%s removed.\n", node->name);
 		switch_core_hash_delete(globals.fifo_hash, node->name);
+		switch_thread_rwlock_wrlock(node->rwlock);
+		node->ready = 0;
+		switch_mutex_lock(node->mutex);
 		switch_core_hash_destroy(&node->caller_hash);
 		switch_core_hash_destroy(&node->consumer_hash);
+		switch_mutex_unlock(node->mutex);
 		switch_thread_rwlock_unlock(node->rwlock);
 		switch_core_destroy_memory_pool(&node->pool);
+
 	}
 	switch_mutex_unlock(globals.mutex);