diff options
Diffstat (limited to 'ipc/chromium/src/base/lock_impl_win.cc')
-rw-r--r-- | ipc/chromium/src/base/lock_impl_win.cc | 67 |
1 files changed, 10 insertions, 57 deletions
diff --git a/ipc/chromium/src/base/lock_impl_win.cc b/ipc/chromium/src/base/lock_impl_win.cc index 17d72ea962..c8f2191441 100644 --- a/ipc/chromium/src/base/lock_impl_win.cc +++ b/ipc/chromium/src/base/lock_impl_win.cc @@ -1,74 +1,27 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #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). +namespace base { +namespace internal { -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); -} +LockImpl::LockImpl() : native_handle_(SRWLOCK_INIT) {} -LockImpl::~LockImpl() { - ::DeleteCriticalSection(&os_lock_); -} +LockImpl::~LockImpl() = default; 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_, 0); - 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; + return !!::TryAcquireSRWLockExclusive(&native_handle_); } void LockImpl::Lock() { - ::EnterCriticalSection(&os_lock_); -#ifndef NDEBUG - // ONLY access data after locking. - owning_thread_id_ = PlatformThread::CurrentId(); - DCHECK_NE(owning_thread_id_, 0); - recursion_count_shadow_++; - if (2 == recursion_count_shadow_ && !recursion_used_) { - recursion_used_ = true; - DCHECK(false); // Catch accidental redundant lock acquisition. - } -#endif // NDEBUG + ::AcquireSRWLockExclusive(&native_handle_); } 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_); + ::ReleaseSRWLockExclusive(&native_handle_); } -// 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 +} // namespace internal +} // namespace base |