aboutsummaryrefslogtreecommitdiff
path: root/drd/drd_clientreq.c
diff options
context:
space:
mode:
authorbart <bart@a5019735-40e9-0310-863c-91ae7b9d1cf9>2008-07-07 08:10:56 +0000
committerbart <bart@a5019735-40e9-0310-863c-91ae7b9d1cf9>2008-07-07 08:10:56 +0000
commitf4f0581c0f14966224135f8dd73ed6f37c8b5a94 (patch)
tree8db6593d38a03ee3e3b914337ad2bf47938d5326 /drd/drd_clientreq.c
parent19c4260faa3852e39fac956b460f575c09550866 (diff)
downloadvalgrind-f4f0581c0f14966224135f8dd73ed6f37c8b5a94.tar.gz
Made spinlocks work again.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8372 a5019735-40e9-0310-863c-91ae7b9d1cf9
Diffstat (limited to 'drd/drd_clientreq.c')
-rw-r--r--drd/drd_clientreq.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drd/drd_clientreq.c b/drd/drd_clientreq.c
index e83d0e67d..9a267e541 100644
--- a/drd/drd_clientreq.c
+++ b/drd/drd_clientreq.c
@@ -247,9 +247,13 @@ static Bool drd_handle_client_request(ThreadId vg_tid, UWord* arg, UWord* ret)
thread_leave_synchr(drd_tid);
break;
- case VG_USERREQ__SPIN_INIT_OR_UNLOCK:
- tl_assert(thread_get_synchr_nesting_count(drd_tid) == 0);
- drd_spin_init_or_unlock(arg[1]);
+ case VG_USERREQ__PRE_SPIN_INIT_OR_UNLOCK:
+ if (thread_enter_synchr(drd_tid) == 0)
+ drd_spin_init_or_unlock(arg[1]);
+ break;
+
+ case VG_USERREQ__POST_SPIN_INIT_OR_UNLOCK:
+ thread_leave_synchr(drd_tid);
break;
case VG_USERREQ__PRE_COND_INIT: