[Freeswitch-svn] [commit] r3668 - freeswitch/trunk/src/mod/applications/mod_conference

Freeswitch SVN anthm at freeswitch.org
Thu Dec 14 22:07:45 EST 2006


Author: anthm
Date: Thu Dec 14 22:07:44 2006
New Revision: 3668

Modified:
   freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c

Log:
fix

Modified: freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c
==============================================================================
--- freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c	(original)
+++ freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c	Thu Dec 14 22:07:44 2006
@@ -475,7 +475,7 @@
 	switch_mutex_lock(member->flag_mutex);
 
 	for (imember = conference->members; imember; imember = imember->next) {
-		if (imember == member ) {
+		if (imember == member) {
 			if (last) {
 				last->next = imember->next;
 			} else {
@@ -487,6 +487,29 @@
 	}
 
 
+    if (member->fnode) { /* Close Unused Handles */
+        confernce_file_node_t *fnode, *cur;
+        switch_memory_pool_t *pool;
+        
+        fnode = member->fnode;
+        while(fnode) {
+            cur = fnode;
+            fnode = fnode->next;
+
+            if (cur->type == NODE_TYPE_SPEECH) {
+                switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_NONE;
+                switch_core_speech_close(&cur->sh, &flags);
+            } else {
+                switch_core_file_close(&cur->fh);
+            }
+            
+            pool = cur->pool;
+            switch_core_destroy_memory_pool(&pool);
+        }
+
+        member->fnode = NULL;
+    }
+
 	member->conference = NULL;
 
 	if (!switch_test_flag(member, MFLAG_NOCHANNEL)) {
@@ -745,6 +768,28 @@
 
 		switch_mutex_lock(conference->mutex);
 
+		if (conference->fnode) { /* Close Unused Handles */
+			confernce_file_node_t *fnode, *cur;
+			switch_memory_pool_t *pool;
+
+            fnode = conference->fnode;
+            while (fnode) {
+                cur = fnode;
+                fnode = fnode->next;
+
+                if (cur->type == NODE_TYPE_SPEECH) {
+                    switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_NONE;
+                    switch_core_speech_close(&cur->sh, &flags);
+                } else {
+                    switch_core_file_close(&cur->fh);
+                }
+
+                pool = cur->pool;
+                switch_core_destroy_memory_pool(&pool);
+            }
+            conference->fnode = NULL;
+		}
+
 		for(imember = conference->members; imember; imember = imember->next) {
 			switch_channel_t *channel;
 
@@ -1583,11 +1628,11 @@
 	} else {
 		member->fnode = fnode;
 	}
-	switch_mutex_unlock(member->flag_mutex);
 
 	/* Begin Generation */
 	switch_sleep(200000);
 	switch_core_speech_feed_tts(&fnode->sh, text, &flags);
+	switch_mutex_unlock(member->flag_mutex);
 
 	return SWITCH_STATUS_SUCCESS;
 }
@@ -1651,11 +1696,11 @@
 	} else {
 		conference->fnode = fnode;
 	}
-	switch_mutex_unlock(conference->mutex);
 
 	/* Begin Generation */
 	switch_sleep(200000);
 	switch_core_speech_feed_tts(&fnode->sh, text, &flags);
+	switch_mutex_unlock(conference->mutex);
 
 	return SWITCH_STATUS_SUCCESS;
 }



More information about the Freeswitch-svn mailing list