@@ -43,6 +43,7 @@ lock_and_signal::lock_and_signal()
43
43
#endif
44
44
45
45
lock_and_signal::~lock_and_signal () {
46
+ assert (_holding_thread == INVALID_THREAD);
46
47
#if defined(__WIN32__)
47
48
CloseHandle (_event);
48
49
DeleteCriticalSection (&_cs);
@@ -53,6 +54,7 @@ lock_and_signal::~lock_and_signal() {
53
54
}
54
55
55
56
void lock_and_signal::lock () {
57
+ assert (!lock_held_by_current_thread ());
56
58
#if defined(__WIN32__)
57
59
EnterCriticalSection (&_cs);
58
60
_holding_thread = GetCurrentThreadId ();
@@ -63,6 +65,7 @@ void lock_and_signal::lock() {
63
65
}
64
66
65
67
void lock_and_signal::unlock () {
68
+ assert (lock_held_by_current_thread ());
66
69
_holding_thread = INVALID_THREAD;
67
70
#if defined(__WIN32__)
68
71
LeaveCriticalSection (&_cs);
@@ -81,9 +84,11 @@ void lock_and_signal::wait() {
81
84
LeaveCriticalSection (&_cs);
82
85
WaitForSingleObject (_event, INFINITE);
83
86
EnterCriticalSection (&_cs);
87
+ assert (_holding_thread == INVALID_THREAD);
84
88
_holding_thread = GetCurrentThreadId ();
85
89
#else
86
90
CHECKED (pthread_cond_wait (&_cond, &_mutex));
91
+ assert (_holding_thread == INVALID_THREAD);
87
92
_holding_thread = pthread_self ();
88
93
#endif
89
94
}
0 commit comments