Guard RestoreTokenManager add/reads with Mutex The RestoreTokenManager is a singleton who's adds and reads could be accessed by multiple threads simultaneously. To prevent any potential issues/collisions, ensure that such accesses happen behind a lock. Bug: chromium:513049286 Change-Id: I44c1c7977a6d02e1ac3fbe00e6ffc7bc22e41e46 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/472480 Reviewed-by: Mark Foltz <mfoltz@chromium.org> Auto-Submit: Alexander Cooper <alcooper@chromium.org> Commit-Queue: Mark Foltz <mfoltz@chromium.org> Cr-Commit-Position: refs/heads/main@{#47711}
diff --git a/modules/desktop_capture/linux/wayland/restore_token_manager.cc b/modules/desktop_capture/linux/wayland/restore_token_manager.cc index ff843c2..101a5af 100644 --- a/modules/desktop_capture/linux/wayland/restore_token_manager.cc +++ b/modules/desktop_capture/linux/wayland/restore_token_manager.cc
@@ -13,6 +13,7 @@ #include <string> #include "modules/desktop_capture/desktop_capturer.h" +#include "rtc_base/synchronization/mutex.h" namespace webrtc { @@ -24,15 +25,18 @@ void RestoreTokenManager::AddToken(DesktopCapturer::SourceId id, const std::string& token) { + MutexLock lock(&mutex_); restore_tokens_.insert({id, token}); } std::string RestoreTokenManager::GetToken(DesktopCapturer::SourceId id) { + MutexLock lock(&mutex_); const std::string token = restore_tokens_[id]; return token; } DesktopCapturer::SourceId RestoreTokenManager::GetUnusedId() { + MutexLock lock(&mutex_); return ++last_source_id_; }
diff --git a/modules/desktop_capture/linux/wayland/restore_token_manager.h b/modules/desktop_capture/linux/wayland/restore_token_manager.h index 06d3071..120a4b2 100644 --- a/modules/desktop_capture/linux/wayland/restore_token_manager.h +++ b/modules/desktop_capture/linux/wayland/restore_token_manager.h
@@ -15,6 +15,8 @@ #include <unordered_map> #include "modules/desktop_capture/desktop_capturer.h" +#include "rtc_base/synchronization/mutex.h" +#include "rtc_base/thread_annotations.h" namespace webrtc { @@ -35,9 +37,11 @@ RestoreTokenManager() = default; ~RestoreTokenManager() = default; - DesktopCapturer::SourceId last_source_id_ = 0; + Mutex mutex_; + DesktopCapturer::SourceId last_source_id_ RTC_GUARDED_BY(mutex_) = 0; - std::unordered_map<DesktopCapturer::SourceId, std::string> restore_tokens_; + std::unordered_map<DesktopCapturer::SourceId, std::string> restore_tokens_ + RTC_GUARDED_BY(mutex_); }; } // namespace webrtc