summaryrefslogtreecommitdiffstats
path: root/base/lock_impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'base/lock_impl.h')
-rw-r--r--base/lock_impl.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/base/lock_impl.h b/base/lock_impl.h
index 5e323a6..2d4a921 100644
--- a/base/lock_impl.h
+++ b/base/lock_impl.h
@@ -41,6 +41,17 @@ class LockImpl {
// a successful call to Try, or a call to Lock.
void Unlock();
+ // Debug-only method that will DCHECK() if the lock is not acquired by the
+ // current thread. In non-debug builds, no check is performed.
+ // Because linux and mac condition variables modify the underlyning lock
+ // through the os_lock() method, runtime assertions can not be done on those
+ // builds.
+#if defined(NDEBUG) || !defined(OS_WIN)
+ void AssertAcquired() const {}
+#else
+ void AssertAcquired() const;
+#endif
+
// Return the native underlying lock. Not supported for Windows builds.
// TODO(awalker): refactor lock and condition variables so that this is
// unnecessary.
@@ -51,6 +62,14 @@ class LockImpl {
private:
OSLockType os_lock_;
+#if !defined(NDEBUG) && defined(OS_WIN)
+ // All private data is implicitly protected by lock_.
+ // Be VERY careful to only access members under that lock.
+ PlatformThreadId owning_thread_id_;
+ int32 recursion_count_shadow_;
+ bool recursion_used_; // Allow debugging to continued after a DCHECK().
+#endif // NDEBUG
+
DISALLOW_COPY_AND_ASSIGN(LockImpl);
};