lock.cc revision 3f50c38dc070f4bb515c1b64450dae14f316474e
1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// This file is used for debugging assertion support. The Lock class 6// is functionally a wrapper around the LockImpl class, so the only 7// real intelligence in the class is in the debugging logic. 8 9#if !defined(NDEBUG) 10 11#include "base/synchronization/lock.h" 12#include "base/logging.h" 13 14namespace base { 15 16Lock::Lock() : lock_() { 17 owned_by_thread_ = false; 18 owning_thread_id_ = static_cast<PlatformThreadId>(0); 19} 20 21void Lock::AssertAcquired() const { 22 DCHECK(owned_by_thread_); 23 DCHECK_EQ(owning_thread_id_, PlatformThread::CurrentId()); 24} 25 26void Lock::CheckHeldAndUnmark() { 27 DCHECK(owned_by_thread_); 28 DCHECK_EQ(owning_thread_id_, PlatformThread::CurrentId()); 29 owned_by_thread_ = false; 30 owning_thread_id_ = static_cast<PlatformThreadId>(0); 31} 32 33void Lock::CheckUnheldAndMark() { 34 DCHECK(!owned_by_thread_); 35 owned_by_thread_ = true; 36 owning_thread_id_ = PlatformThread::CurrentId(); 37} 38 39} // namespace base 40 41#endif // NDEBUG 42