From 1dd0f46d242ac273cd7ff138b9311384c60c1464 Mon Sep 17 00:00:00 2001 From: "rdsmith@google.com" Date: Sun, 13 Jun 2010 12:26:18 +0000 Subject: Initial implementation of new AssertAcquired() functionality for Posix. Hoisted the windows LockImpl funcitonality up into Lock and added material to ConditionVariable to adjust those shadow variables when needed. Also got rid of os_lock() primitive in Lock class by piggybacking on friend decl needed for accessing shadow variables. BUG=44091 TEST=Try bot run on Windows, Linux, Mac. Will land during low traffic time and revert on any problems or perf degradation. Review URL: http://codereview.chromium.org/2196001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@49648 0039d316-1c4b-4281-b951-d872f2087c98 --- base/lock_impl_win.cc | 41 ----------------------------------------- 1 file changed, 41 deletions(-) (limited to 'base/lock_impl_win.cc') diff --git a/base/lock_impl_win.cc b/base/lock_impl_win.cc index 0d1ac93..14b76f8 100644 --- a/base/lock_impl_win.cc +++ b/base/lock_impl_win.cc @@ -5,16 +5,7 @@ #include "base/lock_impl.h" #include "base/logging.h" -// NOTE: Although windows critical sections support recursive locks, we do not -// allow this, and we will commonly fire a DCHECK() if a thread attempts to -// acquire the lock a second time (while already holding it). - LockImpl::LockImpl() { -#ifndef NDEBUG - recursion_count_shadow_ = 0; - recursion_used_ = false; - owning_thread_id_ = 0; -#endif // NDEBUG // The second parameter is the spin count, for short-held locks it avoid the // contending thread from going to sleep which helps performance greatly. ::InitializeCriticalSectionAndSpinCount(&os_lock_, 2000); @@ -26,16 +17,6 @@ LockImpl::~LockImpl() { bool LockImpl::Try() { if (::TryEnterCriticalSection(&os_lock_) != FALSE) { -#ifndef NDEBUG - // ONLY access data after locking. - owning_thread_id_ = PlatformThread::CurrentId(); - DCHECK_NE(owning_thread_id_, 0u); - recursion_count_shadow_++; - if (2 == recursion_count_shadow_ && !recursion_used_) { - recursion_used_ = true; - DCHECK(false); // Catch accidental redundant lock acquisition. - } -#endif return true; } return false; @@ -43,31 +24,9 @@ bool LockImpl::Try() { void LockImpl::Lock() { ::EnterCriticalSection(&os_lock_); -#ifndef NDEBUG - // ONLY access data after locking. - owning_thread_id_ = PlatformThread::CurrentId(); - DCHECK_NE(owning_thread_id_, 0u); - recursion_count_shadow_++; - if (2 == recursion_count_shadow_ && !recursion_used_) { - recursion_used_ = true; - DCHECK(false); // Catch accidental redundant lock acquisition. - } -#endif // NDEBUG } void LockImpl::Unlock() { -#ifndef NDEBUG - --recursion_count_shadow_; // ONLY access while lock is still held. - DCHECK(0 <= recursion_count_shadow_); - owning_thread_id_ = 0; -#endif // NDEBUG ::LeaveCriticalSection(&os_lock_); } -// In non-debug builds, this method is declared as an empty inline method. -#ifndef NDEBUG -void LockImpl::AssertAcquired() const { - DCHECK(recursion_count_shadow_ > 0); - DCHECK_EQ(owning_thread_id_, PlatformThread::CurrentId()); -} -#endif -- cgit v1.1