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;
    }
 
    /*