From: Anthony Minessale Date: Wed, 17 Feb 2010 21:57:45 +0000 (+0000) Subject: MODAPP-398 X-Git-Tag: v1.0.6~447 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=984f0f44d9eb27b3461923a22e9feedbac976386;p=thirdparty%2Ffreeswitch.git MODAPP-398 git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16681 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index 875c4415be..e108dc89ec 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -1046,7 +1046,7 @@ static void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, v } /* 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) { diff --git a/src/switch_core_io.c b/src/switch_core_io.c index 4d7e0d52cf..24e7bdb400 100644 --- a/src/switch_core_io.c +++ b/src/switch_core_io.c @@ -105,11 +105,16 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi 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_DECLARE(switch_status_t) switch_core_session_write_frame(switch_core_sess 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 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_write_frame(switch_core_sess 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;