rtc::CriticalSection: Add function IsLocked
R=tommi@webrtc.org Review URL: https://webrtc-codereview.appspot.com/50759004 Cr-Commit-Position: refs/heads/master@{#9065}
This commit is contained in:
parent
bd67f66ebd
commit
6bf10843bf
@ -27,9 +27,9 @@
|
|||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#if (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON))
|
||||||
#define CS_TRACK_OWNER 1
|
#define CS_TRACK_OWNER 1
|
||||||
#endif // _DEBUG
|
#endif
|
||||||
|
|
||||||
#if CS_TRACK_OWNER
|
#if CS_TRACK_OWNER
|
||||||
#define TRACK_OWNER(x) x
|
#define TRACK_OWNER(x) x
|
||||||
@ -58,6 +58,8 @@ class LOCKABLE CriticalSection {
|
|||||||
bool CurrentThreadIsOwner() const {
|
bool CurrentThreadIsOwner() const {
|
||||||
return crit_.OwningThread == reinterpret_cast<HANDLE>(GetCurrentThreadId());
|
return crit_.OwningThread == reinterpret_cast<HANDLE>(GetCurrentThreadId());
|
||||||
}
|
}
|
||||||
|
// Use only for DCHECKing.
|
||||||
|
bool IsLocked() { return crit_.LockCount != -1; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CRITICAL_SECTION crit_;
|
CRITICAL_SECTION crit_;
|
||||||
@ -102,6 +104,10 @@ class LOCKABLE CriticalSection {
|
|||||||
return true;
|
return true;
|
||||||
#endif // CS_TRACK_OWNER
|
#endif // CS_TRACK_OWNER
|
||||||
}
|
}
|
||||||
|
// Use only for DCHECKing.
|
||||||
|
#if CS_TRACK_OWNER
|
||||||
|
bool IsLocked() { return thread_ != 0; }
|
||||||
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
pthread_mutex_t mutex_;
|
pthread_mutex_t mutex_;
|
||||||
|
@ -281,4 +281,21 @@ TEST(CriticalSectionTest, Basic) {
|
|||||||
EXPECT_EQ(0, runner.shared_value());
|
EXPECT_EQ(0, runner.shared_value());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
|
||||||
|
TEST(CriticalSectionTest, IsLocked) {
|
||||||
|
// Simple single-threaded test of IsLocked.
|
||||||
|
CriticalSection cs;
|
||||||
|
EXPECT_FALSE(cs.IsLocked());
|
||||||
|
cs.Enter();
|
||||||
|
EXPECT_TRUE(cs.IsLocked());
|
||||||
|
cs.Leave();
|
||||||
|
EXPECT_FALSE(cs.IsLocked());
|
||||||
|
if (!cs.TryEnter())
|
||||||
|
FAIL();
|
||||||
|
EXPECT_TRUE(cs.IsLocked());
|
||||||
|
cs.Leave();
|
||||||
|
EXPECT_FALSE(cs.IsLocked());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
} // namespace rtc
|
} // namespace rtc
|
||||||
|
Loading…
x
Reference in New Issue
Block a user