Change thread check to race check. Also, add comment to explain implementation of RaceChecker.

BUG=webrtc:6345

Review-Url: https://codereview.webrtc.org/2350663002
Cr-Commit-Position: refs/heads/master@{#14369}
diff --git a/webrtc/base/race_checker.cc b/webrtc/base/race_checker.cc
index 9f0946c..92bdd7b 100644
--- a/webrtc/base/race_checker.cc
+++ b/webrtc/base/race_checker.cc
@@ -14,6 +14,14 @@
 
 RaceChecker::RaceChecker() {}
 
+// Note that the implementation here is in itself racy, but we pretend it does
+// not matter because we want this useful in release builds without having to
+// pay the cost of using atomics. A race hitting the race checker is likely to
+// cause access_count_ to diverge from zero and therefore cause the ThreadRef
+// comparison to fail, signaling a race, although it may not be in the exact
+// spot where a race *first* appeared in the code we're trying to protect. There
+// is also a chance that an actual race is missed, however the probability of
+// that has been considered small enough to be an acceptable trade off.
 bool RaceChecker::Acquire() const {
   const PlatformThreadRef current_thread = CurrentThreadRef();
   // Set new accessing thread if this is a new use.
diff --git a/webrtc/media/engine/webrtcvoiceengine.cc b/webrtc/media/engine/webrtcvoiceengine.cc
index e066f30..358c142 100644
--- a/webrtc/media/engine/webrtcvoiceengine.cc
+++ b/webrtc/media/engine/webrtcvoiceengine.cc
@@ -26,6 +26,7 @@
 #include "webrtc/base/constructormagic.h"
 #include "webrtc/base/helpers.h"
 #include "webrtc/base/logging.h"
+#include "webrtc/base/race_checker.h"
 #include "webrtc/base/stringencode.h"
 #include "webrtc/base/stringutils.h"
 #include "webrtc/base/trace_event.h"
@@ -1155,7 +1156,6 @@
     // TODO(solenberg): Once we're not using FakeWebRtcVoiceEngine anymore:
     // RTC_DCHECK(voe_audio_transport);
     RTC_DCHECK(call);
-    audio_capture_thread_checker_.DetachFromThread();
     config_.rtp.ssrc = ssrc;
     config_.rtp.c_name = c_name;
     config_.voe_channel_id = ch;
@@ -1270,7 +1270,7 @@
               int sample_rate,
               size_t number_of_channels,
               size_t number_of_frames) override {
-    RTC_DCHECK(audio_capture_thread_checker_.CalledOnValidThread());
+    RTC_CHECK_RUNS_SERIALIZED(&audio_capture_race_checker_);
     RTC_DCHECK(voe_audio_transport_);
     voe_audio_transport_->PushCaptureData(config_.voe_channel_id, audio_data,
                                           bits_per_sample, sample_rate,
@@ -1317,7 +1317,7 @@
   }
 
   rtc::ThreadChecker worker_thread_checker_;
-  rtc::ThreadChecker audio_capture_thread_checker_;
+  rtc::RaceChecker audio_capture_race_checker_;
   webrtc::AudioTransport* const voe_audio_transport_ = nullptr;
   webrtc::Call* call_ = nullptr;
   webrtc::AudioSendStream::Config config_;