From: Steinar H. Gunderson Date: Fri, 23 Mar 2018 15:33:20 +0000 (+0100) Subject: Fix a thread race in X264Encoder. Found by GCC TSan. X-Git-Tag: 1.7.1~8 X-Git-Url: https://git.sesse.net/?p=nageru;a=commitdiff_plain;h=982a1d295c56f0398d69263947b50475aee64b34;hp=52067673f1649e995881331b111f891e1a83e286 Fix a thread race in X264Encoder. Found by GCC TSan. --- diff --git a/x264_encoder.cpp b/x264_encoder.cpp index ccf6942..66c0634 100644 --- a/x264_encoder.cpp +++ b/x264_encoder.cpp @@ -343,7 +343,12 @@ void X264Encoder::encode_frame(X264Encoder::QueuedFrame qf) } if (speed_control) { - speed_control->before_frame(float(free_frames.size()) / X264_QUEUE_LENGTH, X264_QUEUE_LENGTH, 1e6 * qf.duration / TIMEBASE); + float queue_fill_ratio; + { + lock_guard lock(mu); + queue_fill_ratio = float(free_frames.size()) / X264_QUEUE_LENGTH; + } + speed_control->before_frame(queue_fill_ratio, X264_QUEUE_LENGTH, 1e6 * qf.duration / TIMEBASE); } dyn.x264_encoder_encode(x264, &nal, &num_nal, input_pic, &pic); if (speed_control) {