From: Anthony Minessale Date: Thu, 17 Nov 2016 02:08:56 +0000 (-0600) Subject: FS-9748 #resolve [Locking contention with mod_shout playing conference moh] %backport=1.6 X-Git-Tag: v1.8.0~1052 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=232d1715773c5428c9a60c676ce33493ee393ef6;p=thirdparty%2Ffreeswitch.git FS-9748 #resolve [Locking contention with mod_shout playing conference moh] %backport=1.6 --- diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index cc8baf4119..c7bee4339e 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -237,6 +237,7 @@ void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, void *ob uint32_t conference_energy = 0; int nomoh = 0; conference_member_t *floor_holder; + switch_status_t moh_status = SWITCH_STATUS_SUCCESS; /* Sync the conference to a single timing source */ if (switch_core_timer_next(&timer) != SWITCH_STATUS_SUCCESS) { diff --git a/src/mod/applications/mod_conference/mod_conference.h b/src/mod/applications/mod_conference/mod_conference.h index 8a03a928e3..22b38e7226 100644 --- a/src/mod/applications/mod_conference/mod_conference.h +++ b/src/mod/applications/mod_conference/mod_conference.h @@ -683,6 +683,7 @@ typedef struct conference_obj { int scale_h264_canvas_height; int scale_h264_canvas_fps_divisor; char *scale_h264_canvas_bandwidth; + uint32_t moh_wait; } conference_obj_t; /* Relationship with another member */ diff --git a/src/mod/formats/mod_shout/mod_shout.c b/src/mod/formats/mod_shout/mod_shout.c index 8372a03b7f..f326116a5b 100644 --- a/src/mod/formats/mod_shout/mod_shout.c +++ b/src/mod/formats/mod_shout/mod_shout.c @@ -717,7 +717,7 @@ static switch_status_t shout_file_open(switch_file_handle_t *handle, const char if (handle->handler) { int sanity = 1000; - while(--sanity > 0 && !switch_buffer_inuse(context->audio_buffer)) { + while(--sanity > 0 && !switch_buffer_inuse(context->audio_buffer) && !context->eof && !context->err) { switch_yield(20000); }