diff options
| author | Chris Peterson <cpeterson@mozilla.com> | 2012-02-19 23:15:35 -0800 |
|---|---|---|
| committer | Chris Peterson <cpeterson@mozilla.com> | 2012-02-19 23:15:35 -0800 |
| commit | fed81c2cfc2c16e4a2c66f25b83e34985af70f8d (patch) | |
| tree | 177f7980a4f1ec422a12bba0c45df1bd298723c9 /src/rt/sync | |
| parent | 9f492932324aded094042759eeb5824c64aa98e0 (diff) | |
rt: Add some lock_and_signal assertions
Assert that locks are not reentered on the same thread, unlocked by a different thread, or deleted while locked.
Diffstat (limited to 'src/rt/sync')
| -rw-r--r-- | src/rt/sync/lock_and_signal.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/rt/sync/lock_and_signal.cpp b/src/rt/sync/lock_and_signal.cpp index 99861ae4279..fa19b63385d 100644 --- a/src/rt/sync/lock_and_signal.cpp +++ b/src/rt/sync/lock_and_signal.cpp @@ -43,6 +43,7 @@ lock_and_signal::lock_and_signal() #endif lock_and_signal::~lock_and_signal() { + assert(_holding_thread == INVALID_THREAD); #if defined(__WIN32__) CloseHandle(_event); DeleteCriticalSection(&_cs); @@ -53,6 +54,7 @@ lock_and_signal::~lock_and_signal() { } void lock_and_signal::lock() { + assert(!lock_held_by_current_thread()); #if defined(__WIN32__) EnterCriticalSection(&_cs); _holding_thread = GetCurrentThreadId(); @@ -63,6 +65,7 @@ void lock_and_signal::lock() { } void lock_and_signal::unlock() { + assert(lock_held_by_current_thread()); _holding_thread = INVALID_THREAD; #if defined(__WIN32__) LeaveCriticalSection(&_cs); @@ -81,9 +84,11 @@ void lock_and_signal::wait() { LeaveCriticalSection(&_cs); WaitForSingleObject(_event, INFINITE); EnterCriticalSection(&_cs); + assert(_holding_thread == INVALID_THREAD); _holding_thread = GetCurrentThreadId(); #else CHECKED(pthread_cond_wait(&_cond, &_mutex)); + assert(_holding_thread == INVALID_THREAD); _holding_thread = pthread_self(); #endif } |
