mirror of
https://github.com/signalwire/freeswitch.git
synced 2026-10-09 21:14:02 +00:00
FS-8677 #resolve [Crash (possible memory corruption) after codec change]
This commit is contained in:
@@ -746,15 +746,24 @@ void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, void *ob
|
||||
}
|
||||
|
||||
if (switch_channel_test_flag(member->channel, CF_CONFERENCE_RESET_MEDIA)) {
|
||||
member->reset_media = 10;
|
||||
switch_channel_audio_sync(member->channel);
|
||||
switch_channel_clear_flag(member->channel, CF_CONFERENCE_RESET_MEDIA);
|
||||
member->loop_loop = 1;
|
||||
|
||||
}
|
||||
|
||||
if (member->reset_media) {
|
||||
if (--member->reset_media > 0) {
|
||||
goto do_continue;
|
||||
}
|
||||
|
||||
if (conference_member_setup_media(member, member->conference)) {
|
||||
switch_mutex_unlock(member->read_mutex);
|
||||
break;
|
||||
}
|
||||
|
||||
member->loop_loop = 1;
|
||||
|
||||
goto do_continue;
|
||||
goto do_continue;
|
||||
}
|
||||
|
||||
if (switch_test_flag(read_frame, SFF_CNG)) {
|
||||
@@ -1199,10 +1208,10 @@ void conference_loop_output(conference_member_t *member)
|
||||
uint32_t mux_used = 0;
|
||||
|
||||
|
||||
if (switch_channel_test_flag(member->channel, CF_CONFERENCE_RESET_MEDIA)) {
|
||||
switch_cond_next();
|
||||
continue;
|
||||
}
|
||||
//if (member->reset_media || switch_channel_test_flag(member->channel, CF_CONFERENCE_RESET_MEDIA)) {
|
||||
// switch_cond_next();
|
||||
// continue;
|
||||
//}
|
||||
|
||||
switch_mutex_lock(member->write_mutex);
|
||||
|
||||
|
||||
@@ -1620,13 +1620,7 @@ int conference_member_setup_media(conference_member_t *member, conference_obj_t
|
||||
|
||||
switch_mutex_lock(member->audio_out_mutex);
|
||||
|
||||
if (!member->orig_read_impl.samples_per_second) {
|
||||
switch_core_session_get_read_impl(member->session, &member->orig_read_impl);
|
||||
member->native_rate = read_impl.samples_per_second;
|
||||
}
|
||||
|
||||
read_impl = member->orig_read_impl;
|
||||
|
||||
switch_core_session_get_read_impl(member->session, &read_impl);
|
||||
|
||||
if (switch_core_codec_ready(&member->read_codec)) {
|
||||
switch_core_codec_destroy(&member->read_codec);
|
||||
@@ -1642,6 +1636,9 @@ int conference_member_setup_media(conference_member_t *member, conference_obj_t
|
||||
switch_resample_destroy(&member->read_resampler);
|
||||
}
|
||||
|
||||
switch_core_session_get_read_impl(member->session, &member->orig_read_impl);
|
||||
member->native_rate = member->orig_read_impl.samples_per_second;
|
||||
|
||||
/* Setup a Signed Linear codec for reading audio. */
|
||||
if (switch_core_codec_init(&member->read_codec,
|
||||
"L16",
|
||||
|
||||
@@ -769,6 +769,7 @@ struct conference_member {
|
||||
int max_bw_in;
|
||||
int force_bw_in;
|
||||
int max_bw_out;
|
||||
int reset_media;
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
|
||||
Reference in New Issue
Block a user