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