[Freeswitch-svn] [commit] r10202 - in freeswitch/trunk/src: . mod/endpoints/mod_portaudio

Freeswitch SVN anthm at freeswitch.org
Thu Oct 30 08:46:10 EDT 2008


Author: anthm
Date: Thu Oct 30 08:46:09 2008
New Revision: 10202

Modified:
   freeswitch/trunk/src/mod/endpoints/mod_portaudio/mod_portaudio.c
   freeswitch/trunk/src/switch_core_file.c
   freeswitch/trunk/src/switch_core_timer.c

Log:
patch for FSCORE-205

Modified: freeswitch/trunk/src/mod/endpoints/mod_portaudio/mod_portaudio.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_portaudio/mod_portaudio.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_portaudio/mod_portaudio.c	Thu Oct 30 08:46:09 2008
@@ -308,10 +308,30 @@
 static void deactivate_audio_device(void)
 {
 	switch_mutex_lock(globals.device_lock);
+	/* LOCKED ************************************************************************************************** */
+
 	if (globals.audio_stream) {
 		CloseAudioStream(globals.audio_stream);
 		globals.audio_stream = NULL;
 	}
+
+	if (globals.read_codec.implementation) {
+		switch_core_codec_destroy(&globals.read_codec);
+	}
+
+	if (globals.write_codec.implementation) {
+		switch_core_codec_destroy(&globals.write_codec);
+	}
+
+	if (globals.timer.timer_interface) {
+		switch_core_timer_destroy(&globals.timer);
+	}
+
+	if (globals.hold_timer.timer_interface) {
+		switch_core_timer_destroy(&globals.hold_timer);
+	}
+
+	/* UNLOCKED ************************************************************************************************* */
 	switch_mutex_unlock(globals.device_lock);
 }
 
@@ -1142,13 +1162,17 @@
 			codec_ms = globals.codec_ms;
 		}
 
-		if (switch_core_codec_init(&globals.read_codec,
-								   "L16",
-								   NULL, sample_rate, codec_ms, 1, SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, NULL,
-								   NULL) != SWITCH_STATUS_SUCCESS) {
-			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't load codec?\n");
-			return SWITCH_STATUS_FALSE;
-		} else {
+		if (!globals.read_codec.implementation) {
+			if (switch_core_codec_init(&globals.read_codec,
+									   "L16",
+									   NULL, sample_rate, codec_ms, 1, SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, NULL,
+									   NULL) != SWITCH_STATUS_SUCCESS) {
+				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't load codec?\n");
+				return SWITCH_STATUS_FALSE;
+			}
+		}
+
+		if (!globals.write_codec.implementation) {
 			if (switch_core_codec_init(&globals.write_codec,
 									   "L16",
 									   NULL,
@@ -1160,25 +1184,29 @@
 			}
 		}
 
-		if (switch_core_timer_init(&globals.timer,
-								   globals.timer_name, codec_ms, globals.read_codec.implementation->samples_per_packet,
-								   module_pool) != SWITCH_STATUS_SUCCESS) {
-			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "setup timer failed!\n");
-			switch_core_codec_destroy(&globals.read_codec);
-			switch_core_codec_destroy(&globals.write_codec);
-			return SWITCH_STATUS_FALSE;
+		if (!globals.timer.timer_interface) {
+			if (switch_core_timer_init(&globals.timer,
+									   globals.timer_name, codec_ms, globals.read_codec.implementation->samples_per_packet,
+									   module_pool) != SWITCH_STATUS_SUCCESS) {
+				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "setup timer failed!\n");
+				switch_core_codec_destroy(&globals.read_codec);
+				switch_core_codec_destroy(&globals.write_codec);
+				return SWITCH_STATUS_FALSE;
+			}
 		}
 
-		if (switch_core_timer_init(&globals.hold_timer,
+		if (!globals.hold_timer.timer_interface) {
+			if (switch_core_timer_init(&globals.hold_timer,
 									   globals.timer_name, codec_ms, globals.read_codec.implementation->samples_per_packet,
-								   module_pool) != SWITCH_STATUS_SUCCESS) {
-			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "setup hold timer failed!\n");
-			switch_core_codec_destroy(&globals.read_codec);
-			switch_core_codec_destroy(&globals.write_codec);
-			switch_core_timer_destroy(&globals.timer);
-			return SWITCH_STATUS_FALSE;
+									   module_pool) != SWITCH_STATUS_SUCCESS) {
+				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "setup hold timer failed!\n");
+				switch_core_codec_destroy(&globals.read_codec);
+				switch_core_codec_destroy(&globals.write_codec);
+				switch_core_timer_destroy(&globals.timer);
+				return SWITCH_STATUS_FALSE;
+			}
 		}
-
+		
 		globals.read_frame.rate = sample_rate;
 		globals.read_frame.codec = &globals.read_codec;
 
@@ -1204,7 +1232,8 @@
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't open audio device!\n");
 			switch_core_codec_destroy(&globals.read_codec);
 			switch_core_codec_destroy(&globals.write_codec);
-
+			switch_core_timer_destroy(&globals.timer);
+			switch_core_timer_destroy(&globals.hold_timer);
 			return SWITCH_STATUS_FALSE;
 		}
 	}

Modified: freeswitch/trunk/src/switch_core_file.c
==============================================================================
--- freeswitch/trunk/src/switch_core_file.c	(original)
+++ freeswitch/trunk/src/switch_core_file.c	Thu Oct 30 08:46:09 2008
@@ -285,6 +285,8 @@
 		switch_core_destroy_memory_pool(&fh->memory_pool);
 	}
 
+	memset(fh, 0, sizeof(*fh));
+
 	return status;
 }
 

Modified: freeswitch/trunk/src/switch_core_timer.c
==============================================================================
--- freeswitch/trunk/src/switch_core_timer.c	(original)
+++ freeswitch/trunk/src/switch_core_timer.c	Thu Oct 30 08:46:09 2008
@@ -125,6 +125,8 @@
 		switch_core_destroy_memory_pool(&timer->memory_pool);
 	}
 
+	memset(timer, 0, sizeof(*timer));
+
 	return SWITCH_STATUS_SUCCESS;
 }
 



More information about the Freeswitch-svn mailing list