drd: Correct semaphore tracing in case sem_*wait() did not wait. See also #305690.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12898 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/drd/drd_semaphore.c b/drd/drd_semaphore.c
index bae3e4d..226c5ea 100644
--- a/drd/drd_semaphore.c
+++ b/drd/drd_semaphore.c
@@ -347,16 +347,17 @@
struct semaphore_info* p;
Segment* sg;
+ tl_assert(waited == 0 || waited == 1);
p = semaphore_get(semaphore);
if (s_trace_semaphore)
- DRD_(trace_msg)("[%d] sem_wait 0x%lx value %u -> %u",
+ DRD_(trace_msg)("[%d] sem_wait 0x%lx value %u -> %u%s",
DRD_(thread_get_running_tid)(), semaphore,
- p ? p->value : 0, p ? p->value - 1 : 0);
+ p ? p->value : 0, p ? p->value - waited : 0,
+ waited ? "" : " (did not wait)");
if (p) {
p->waiters--;
- if (waited)
- p->value--;
+ p->value -= waited;
}
/*