Mutex: remove mutex reentrancy crasher.

This change finally removes the reentrancy crasher after a
period without reported reentrancies.

The change saves 0.8% in a downstream project.

Bug: webrtc:11567
Change-Id: Ia98ad873f02cf5114b3b3518eed7dd8f746f7408
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/186046
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Tommi <tommi@webrtc.org>
Commit-Queue: Markus Handell <handellm@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32257}
diff --git a/rtc_base/synchronization/mutex.h b/rtc_base/synchronization/mutex.h
index 1ccbbdc..620fe74 100644
--- a/rtc_base/synchronization/mutex.h
+++ b/rtc_base/synchronization/mutex.h
@@ -15,7 +15,6 @@
 
 #include "absl/base/const_init.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/platform_thread_types.h"
 #include "rtc_base/system/unused.h"
 #include "rtc_base/thread_annotations.h"
 
@@ -40,54 +39,17 @@
   Mutex& operator=(const Mutex&) = delete;
 
   void Lock() RTC_EXCLUSIVE_LOCK_FUNCTION() {
-    rtc::PlatformThreadRef current = CurrentThreadRefAssertingNotBeingHolder();
     impl_.Lock();
-    // |holder_| changes from 0 to CurrentThreadRef().
-    holder_.store(current, std::memory_order_relaxed);
   }
   RTC_WARN_UNUSED_RESULT bool TryLock() RTC_EXCLUSIVE_TRYLOCK_FUNCTION(true) {
-    rtc::PlatformThreadRef current = CurrentThreadRefAssertingNotBeingHolder();
-    if (impl_.TryLock()) {
-      // |holder_| changes from 0 to CurrentThreadRef().
-      holder_.store(current, std::memory_order_relaxed);
-      return true;
-    }
-    return false;
+    return impl_.TryLock();
   }
   void Unlock() RTC_UNLOCK_FUNCTION() {
-    // |holder_| changes from CurrentThreadRef() to 0. If something else than
-    // CurrentThreadRef() is stored in |holder_|, the Unlock results in
-    // undefined behavior as mutexes can't be unlocked from another thread than
-    // the one that locked it, or called while not being locked.
-    holder_.store(0, std::memory_order_relaxed);
     impl_.Unlock();
   }
 
  private:
-  rtc::PlatformThreadRef CurrentThreadRefAssertingNotBeingHolder() {
-    rtc::PlatformThreadRef holder = holder_.load(std::memory_order_relaxed);
-    rtc::PlatformThreadRef current = rtc::CurrentThreadRef();
-    // TODO(bugs.webrtc.org/11567): remove this temporary check after migrating
-    // fully to Mutex.
-    RTC_CHECK_NE(holder, current);
-    return current;
-  }
-
   MutexImpl impl_;
-  // TODO(bugs.webrtc.org/11567): remove |holder_| after migrating fully to
-  // Mutex.
-  // |holder_| contains the PlatformThreadRef of the thread currently holding
-  // the lock, or 0.
-  // Remarks on the used memory orders: the atomic load in
-  // CurrentThreadRefAssertingNotBeingHolder() observes either of two things:
-  // 1. our own previous write to holder_ with our thread ID.
-  // 2. another thread (with ID y) writing y and then 0 from an initial value of
-  // 0. If we're observing case 1, our own stores are obviously ordered before
-  // the load, and hit the CHECK. If we're observing case 2, the value observed
-  // w.r.t |impl_| being locked depends on the memory order. Since we only care
-  // that it's different from CurrentThreadRef()), we use the more performant
-  // option, memory_order_relaxed.
-  std::atomic<rtc::PlatformThreadRef> holder_ = {0};
 };
 
 // MutexLock, for serializing execution through a scope.