From bd14a73f81cdb92f7b8098ed026b1c687ee78613 Mon Sep 17 00:00:00 2001 From: Andreas Pehrson Date: Mon, 22 May 2023 10:28:04 +0200 Subject: [PATCH] In VideoCaptureModulePipeWire lock around started_ CaptureSettings() can read started_ on the api thread at any time. But it is written and read in pipewire callbacks, on other threads. A lock seems suitable. Bug: webrtc:15181 Change-Id: I3d26f02408a4e56921b955f059e504ffa9b8cae9 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/306121 Reviewed-by: Ilya Nikolaevskiy Commit-Queue: Ilya Nikolaevskiy Reviewed-by: Per Kjellander Cr-Commit-Position: refs/heads/main@{#40286} --- modules/video_capture/linux/video_capture_pipewire.cc | 3 +++ modules/video_capture/linux/video_capture_pipewire.h | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/video_capture/linux/video_capture_pipewire.cc b/modules/video_capture/linux/video_capture_pipewire.cc index c448e94385..bb1babd7af 100644 --- a/modules/video_capture/linux/video_capture_pipewire.cc +++ b/modules/video_capture/linux/video_capture_pipewire.cc @@ -177,6 +177,8 @@ int32_t VideoCaptureModulePipeWire::StopCapture() { } bool VideoCaptureModulePipeWire::CaptureStarted() { + MutexLock lock(&api_lock_); + return started_; } @@ -294,6 +296,7 @@ void VideoCaptureModulePipeWire::OnStreamStateChanged( static_cast(data); RTC_DCHECK(that); + MutexLock lock(&that->api_lock_); switch (state) { case PW_STREAM_STATE_STREAMING: that->started_ = true; diff --git a/modules/video_capture/linux/video_capture_pipewire.h b/modules/video_capture/linux/video_capture_pipewire.h index 5ce02d1adf..2cd6cca34b 100644 --- a/modules/video_capture/linux/video_capture_pipewire.h +++ b/modules/video_capture/linux/video_capture_pipewire.h @@ -46,7 +46,7 @@ class VideoCaptureModulePipeWire : public VideoCaptureImpl { rtc::scoped_refptr session_; int node_id_; VideoCaptureCapability configured_capability_; - bool started_; + bool started_ RTC_GUARDED_BY(api_lock_); struct pw_stream* stream_; struct spa_hook stream_listener_;