| Index: base/lock_impl_win.cc
|
| ===================================================================
|
| --- base/lock_impl_win.cc (revision 11968)
|
| +++ base/lock_impl_win.cc (working copy)
|
| @@ -13,6 +13,7 @@
|
| #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.
|
| @@ -26,6 +27,9 @@
|
| 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;
|
| @@ -41,6 +45,8 @@
|
| ::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;
|
| @@ -53,6 +59,15 @@
|
| #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() {
|
| + DCHECK(recursion_count_shadow_ > 0);
|
| + DCHECK_EQ(owning_thread_id_, PlatformThread::CurrentId());
|
| +}
|
| +#endif
|
|
|