Bug 1308792 - protect the critical section accessing device_info_cs_; r=jesup draft
authorMunro Mengjue Chiang <mchiang@mozilla.com>
Tue, 11 Oct 2016 14:30:28 +0800
changeset 423395 335cb7962dbd5e8f2900ca7984c24e327924d9ec
parent 423365 723c2e894079d0c870a1b78679f971c7a1d3d31f
child 429658 74f75bca119fd14f8111ff88fe8beeb7f91266f1
push id31896
push usermchiang@mozilla.com
push dateTue, 11 Oct 2016 06:30:59 +0000
reviewersjesup
bugs1308792
milestone52.0a1
Bug 1308792 - protect the critical section accessing device_info_cs_; r=jesup MozReview-Commit-ID: GGxtHUPAk6N
media/webrtc/trunk/webrtc/video_engine/vie_input_manager.cc
--- a/media/webrtc/trunk/webrtc/video_engine/vie_input_manager.cc
+++ b/media/webrtc/trunk/webrtc/video_engine/vie_input_manager.cc
@@ -376,31 +376,36 @@ int32_t ViEInputManager::RegisterObserve
     CriticalSectionScoped cs(observer_cs_.get());
     if (observer_) {
       LOG_F(LS_ERROR) << "Observer already registered.";
       return -1;
     }
     observer_ = observer;
   }
 
+  CriticalSectionScoped cs(device_info_cs_.get());
   if (!GetDeviceInfo())
     return -1;
 
   if (capture_device_info_ != NULL)
     capture_device_info_->RegisterVideoInputFeedBack(*this);
 
   return 0;
 }
 
 int32_t ViEInputManager::DeRegisterObserver() {
-  if (capture_device_info_ != NULL)
-    capture_device_info_->DeRegisterVideoInputFeedBack();
+  {
+    CriticalSectionScoped cs(observer_cs_.get());
+    observer_ = NULL;
+  }
 
-  CriticalSectionScoped cs(observer_cs_.get());
-  observer_ = NULL;
+  CriticalSectionScoped cs(device_info_cs_.get());
+  if (capture_device_info_ != NULL) {
+    capture_device_info_->DeRegisterVideoInputFeedBack();
+  }
   return 0;
 }
 
 ViEInputManagerScoped::ViEInputManagerScoped(
     const ViEInputManager& vie_input_manager)
     : ViEManagerScopedBase(vie_input_manager) {
 }