|
From: <sv...@va...> - 2009-06-06 12:46:38
|
Author: bart
Date: 2009-06-06 13:28:20 +0100 (Sat, 06 Jun 2009)
New Revision: 10266
Log:
Robustness improvement: print an error message instead of triggering an assertion failure upon semaphore reinitialization during sem_wait().
Modified:
trunk/drd/drd_semaphore.c
Modified: trunk/drd/drd_semaphore.c
===================================================================
--- trunk/drd/drd_semaphore.c 2009-06-06 12:26:05 UTC (rev 10265)
+++ trunk/drd/drd_semaphore.c 2009-06-06 12:28:20 UTC (rev 10266)
@@ -247,9 +247,17 @@
p = DRD_(semaphore_get_or_allocate)(semaphore);
tl_assert(p);
- tl_assert((int)p->waiters >= 0);
p->waiters++;
- tl_assert(p->waiters > 0);
+
+ if ((int)p->waiters <= 0)
+ {
+ SemaphoreErrInfo sei = { DRD_(thread_get_running_tid)(), semaphore };
+ VG_(maybe_record_error)(VG_(get_running_tid)(),
+ SemaphoreErr,
+ VG_(get_IP)(VG_(get_running_tid)()),
+ "Invalid semaphore",
+ &sei);
+ }
}
/**
|