|
From: <sv...@va...> - 2008-06-28 16:42:09
|
Author: bart
Date: 2008-06-28 17:42:16 +0100 (Sat, 28 Jun 2008)
New Revision: 8302
Log:
Bug fix: only complain about recursive locking before pthread_cond_wait() is called if the calling thread holds the lock.
Modified:
trunk/exp-drd/drd_cond.c
trunk/exp-drd/tests/tc23_bogus_condwait.stderr.exp
Modified: trunk/exp-drd/drd_cond.c
===================================================================
--- trunk/exp-drd/drd_cond.c 2008-06-28 16:28:49 UTC (rev 8301)
+++ trunk/exp-drd/drd_cond.c 2008-06-28 16:42:16 UTC (rev 8302)
@@ -219,7 +219,7 @@
}
tl_assert(p->mutex);
q = mutex_get(p->mutex);
- if (q && q->recursion_count > 0)
+ if (q && q->owner == thread_get_running_tid() && q->recursion_count > 0)
{
const ThreadId vg_tid = VG_(get_running_tid)();
MutexErrInfo MEI = { q->a1, q->recursion_count, q->owner };
Modified: trunk/exp-drd/tests/tc23_bogus_condwait.stderr.exp
===================================================================
--- trunk/exp-drd/tests/tc23_bogus_condwait.stderr.exp 2008-06-28 16:28:49 UTC (rev 8301)
+++ trunk/exp-drd/tests/tc23_bogus_condwait.stderr.exp 2008-06-28 16:42:16 UTC (rev 8302)
@@ -53,10 +53,6 @@
at 0x........: pthread_cond_wait* (drd_pthread_intercepts.c:?)
by 0x........: main (tc23_bogus_condwait.c:78)
-Mutex locked recursively: mutex 0x........, recursion count 1, owner 2.
- at 0x........: pthread_cond_wait* (drd_pthread_intercepts.c:?)
- by 0x........: main (tc23_bogus_condwait.c:78)
-
Thread 3:
Probably a race condition: condition variable 0x........ has been signaled but the associated mutex 0x........ is not locked by the signalling thread.
at 0x........: pthread_cond_signal* (drd_pthread_intercepts.c:?)
@@ -77,4 +73,4 @@
by 0x........: (within libpthread-?.?.so)
by 0x........: clone (in /...libc...)
-ERROR SUMMARY: 12 errors from 12 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 11 errors from 11 contexts (suppressed: 0 from 0)
|