summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/moz-patch-stack/0063.patch
blob: 12bf71ee22c8a682413933ac3ef2473c0513036d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
From: Andreas Pehrson <apehrson@mozilla.com>
Date: Mon, 5 Sep 2022 13:56:00 +0000
Subject: Bug 1786502 - Lock access to DeviceInfo devicechange callbacks.
 r=webrtc-reviewers,jib

Differential Revision: https://phabricator.services.mozilla.com/D155365
Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/e826dfadfe1264c59d9b13e3c17d6f75a40f5c33
---
 modules/video_capture/video_capture.h | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/modules/video_capture/video_capture.h b/modules/video_capture/video_capture.h
index 7279bed476..db07580921 100644
--- a/modules/video_capture/video_capture.h
+++ b/modules/video_capture/video_capture.h
@@ -16,6 +16,8 @@
 #include "modules/desktop_capture/desktop_capture_types.h"
 #include "modules/video_capture/raw_video_sink_interface.h"
 #include "modules/video_capture/video_capture_defines.h"
+#include "rtc_base/synchronization/mutex.h"
+#include "rtc_base/thread_annotations.h"
 #include <set>
 
 #if defined(ANDROID)
@@ -40,15 +42,18 @@ class VideoCaptureModule : public RefCountInterface {
     virtual uint32_t NumberOfDevices() = 0;
     virtual int32_t Refresh() = 0;
     virtual void DeviceChange() {
+      MutexLock lock(&_inputCallbacksMutex);
       for (auto inputCallBack : _inputCallBacks) {
         inputCallBack->OnDeviceChange();
       }
     }
     virtual void RegisterVideoInputFeedBack(VideoInputFeedBack* callBack) {
+      MutexLock lock(&_inputCallbacksMutex);
       _inputCallBacks.insert(callBack);
     }
 
     virtual void DeRegisterVideoInputFeedBack(VideoInputFeedBack* callBack) {
+      MutexLock lock(&_inputCallbacksMutex);
       auto it = _inputCallBacks.find(callBack);
       if (it != _inputCallBacks.end()) {
         _inputCallBacks.erase(it);
@@ -102,7 +107,8 @@ class VideoCaptureModule : public RefCountInterface {
 
     virtual ~DeviceInfo() {}
    private:
-    std::set<VideoInputFeedBack*> _inputCallBacks;
+    Mutex _inputCallbacksMutex;
+    std::set<VideoInputFeedBack*> _inputCallBacks RTC_GUARDED_BY(_inputCallbacksMutex);
   };
 
   //   Register capture data callback