Enabled support for nesting mutexes and condition variables in higher-level synchronization primitives. Changed mutex tracing output slightly.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8377 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/drd/drd_clientreq.c b/drd/drd_clientreq.c
index 9a267e5..6078dea 100644
--- a/drd/drd_clientreq.c
+++ b/drd/drd_clientreq.c
@@ -257,13 +257,21 @@
break;
case VG_USERREQ__PRE_COND_INIT:
- tl_assert(thread_get_synchr_nesting_count(drd_tid) == 0);
- drd_pre_cond_init(arg[1]);
+ if (thread_enter_synchr(drd_tid) == 0)
+ drd_pre_cond_init(arg[1]);
+ break;
+
+ case VG_USERREQ__POST_COND_INIT:
+ thread_leave_synchr(drd_tid);
+ break;
+
+ case VG_USERREQ__PRE_COND_DESTROY:
+ thread_enter_synchr(drd_tid);
break;
case VG_USERREQ__POST_COND_DESTROY:
- tl_assert(thread_get_synchr_nesting_count(drd_tid) == 0);
- drd_post_cond_destroy(arg[1]);
+ if (thread_leave_synchr(drd_tid) == 0)
+ drd_post_cond_destroy(arg[1]);
break;
case VG_USERREQ__PRE_COND_WAIT:
@@ -277,13 +285,21 @@
break;
case VG_USERREQ__PRE_COND_SIGNAL:
- tl_assert(thread_get_synchr_nesting_count(drd_tid) == 0);
- drd_pre_cond_signal(arg[1]);
+ if (thread_enter_synchr(drd_tid) == 0)
+ drd_pre_cond_signal(arg[1]);
+ break;
+
+ case VG_USERREQ__POST_COND_SIGNAL:
+ thread_leave_synchr(drd_tid);
break;
case VG_USERREQ__PRE_COND_BROADCAST:
- tl_assert(thread_get_synchr_nesting_count(drd_tid) == 0);
- drd_pre_cond_broadcast(arg[1]);
+ if (thread_enter_synchr(drd_tid) == 0)
+ drd_pre_cond_broadcast(arg[1]);
+ break;
+
+ case VG_USERREQ__POST_COND_BROADCAST:
+ thread_leave_synchr(drd_tid);
break;
case VG_USERREQ__PRE_SEM_INIT: