Revision
16681
Author
anthm
Date
2010-02-17 15:57:45 -0600 (Wed, 17 Feb 2010)

Log Message

MODAPP-398

Modified Paths

Diff

Modified: freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c (16680 => 16681)


--- freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c	2010-02-17 20:22:33 UTC (rev 16680)
+++ freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c	2010-02-17 21:57:45 UTC (rev 16681)
@@ -1046,7 +1046,7 @@
 		}
 
 		/* Start recording if there's more than one participant. */
-		if (ready > 1 && conference->auto_record && !conference->is_recording) {
+		if (conference->auto_record && !conference->is_recording && conference->count > 1) {
 			conference->is_recording = 1;
 			imember = conference->members;
 			if (imember) {

Modified: freeswitch/trunk/src/switch_core_io.c (16680 => 16681)


--- freeswitch/trunk/src/switch_core_io.c	2010-02-17 20:22:33 UTC (rev 16680)
+++ freeswitch/trunk/src/switch_core_io.c	2010-02-17 21:57:45 UTC (rev 16681)
@@ -105,11 +105,16 @@
 	switch_io_event_hook_read_frame_t *ptr;
 	switch_status_t status = SWITCH_STATUS_FALSE;
 	int need_codec, perfect, do_bugs = 0, do_resample = 0, is_cng = 0;
-	unsigned int flag = 0;
+	unsigned int flag = 0, sanity = 5000;
 	switch_codec_implementation_t codec_impl;
-
+	
 	switch_assert(session != NULL);
 
+	while(!switch_channel_media_ack(session->channel) || !switch_channel_test_flag(session->channel, CF_MEDIA_SET)) {
+		if (!--sanity) break;
+		switch_cond_next();
+	}
+
 	if (!(session->read_codec && session->read_codec->implementation && switch_core_codec_ready(session->read_codec))) {
 		if (switch_channel_test_flag(session->channel, CF_PROXY_MODE) || switch_channel_get_state(session->channel) == CS_HIBERNATE) {
 			switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_CRIT, "%s reading on a session with no media!\n",
@@ -567,6 +572,7 @@
 	switch_status_t status = SWITCH_STATUS_FALSE;
 	switch_frame_t *enc_frame = NULL, *write_frame = frame;
 	unsigned int flag = 0, need_codec = 0, perfect = 0, do_bugs = 0, do_write = 0, do_resample = 0, ptime_mismatch = 0, pass_cng = 0, resample = 0;
+	unsigned int sanity = 5000;
 	int did_write_resample = 0;
 
 	switch_assert(session != NULL);
@@ -583,6 +589,12 @@
 		return SWITCH_STATUS_SUCCESS;
 	}
 
+
+	while(!switch_channel_media_ack(session->channel) || !switch_channel_test_flag(session->channel, CF_MEDIA_SET)) {
+		if (!--sanity) break;
+		switch_cond_next();
+	}
+
 	if (!(session->write_codec && switch_core_codec_ready(session->write_codec)) && !pass_cng) {
 		switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "%s has no write codec.\n", switch_channel_get_name(session->channel));
 		return SWITCH_STATUS_FALSE;