From: Andreas Pehrson Date: Wed, 10 Apr 2024 21:54:00 +0000 Subject: Bug 1888181 - (fix-52fec7d3) Limit scope of race checker in VideoCaptureModuleV4L2::StartCapture. r=mjf TSAN detects a race between destroying the scoped race checker in StartCapture and creating the scoped race checker in CaptureProcess, because once the capture thread has been created (and given its run function) there is no synchronization before the run function starts to run. This patch avoids the race by destroying the StartCapture scoped race checker before creating the capture thread. Differential Revision: https://phabricator.services.mozilla.com/D207203 Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/b046a1446cee5ab485d4868b3ca9784b16b2d02f --- modules/video_capture/linux/video_capture_v4l2.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/video_capture/linux/video_capture_v4l2.cc b/modules/video_capture/linux/video_capture_v4l2.cc index 6d8a5e463f..db2450a2c7 100644 --- a/modules/video_capture/linux/video_capture_v4l2.cc +++ b/modules/video_capture/linux/video_capture_v4l2.cc @@ -129,6 +129,7 @@ int32_t VideoCaptureModuleV4L2::StartCapture( } } + { // We don't want members above to be guarded by capture_checker_ as // it's meant to be for members that are accessed on the API thread // only when we are not capturing. The code above can be called many @@ -298,6 +299,7 @@ int32_t VideoCaptureModuleV4L2::StartCapture( _requestedCapability = capability; _captureStarted = true; _streaming = true; + } // start capture thread; if (_captureThread.empty()) {