|
From: <sv...@va...> - 2009-06-06 19:22:31
|
Author: bart
Date: 2009-06-06 20:22:26 +0100 (Sat, 06 Jun 2009)
New Revision: 10270
Log:
Merged trunk revisions 10261, 10262, 10265, 10266 and 10269.
Modified:
branches/VALGRIND_3_4_BRANCH/drd/drd_barrier.c
branches/VALGRIND_3_4_BRANCH/drd/drd_gomp_intercepts.c
branches/VALGRIND_3_4_BRANCH/drd/drd_main.c
branches/VALGRIND_3_4_BRANCH/drd/drd_mutex.c
branches/VALGRIND_3_4_BRANCH/drd/drd_rwlock.c
branches/VALGRIND_3_4_BRANCH/drd/drd_semaphore.c
branches/VALGRIND_3_4_BRANCH/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3
branches/VALGRIND_3_4_BRANCH/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3-b
branches/VALGRIND_3_4_BRANCH/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.5
branches/VALGRIND_3_4_BRANCH/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.5-ppc
branches/VALGRIND_3_4_BRANCH/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.8
branches/VALGRIND_3_4_BRANCH/glibc-2.X-drd.supp
Modified: branches/VALGRIND_3_4_BRANCH/drd/drd_barrier.c
===================================================================
--- branches/VALGRIND_3_4_BRANCH/drd/drd_barrier.c 2009-06-06 18:09:09 UTC (rev 10269)
+++ branches/VALGRIND_3_4_BRANCH/drd/drd_barrier.c 2009-06-06 19:22:26 UTC (rev 10270)
@@ -388,6 +388,10 @@
VG_(OSetGen_Insert)(p->oset, q);
tl_assert(VG_(OSetGen_Lookup)(p->oset, &word_tid) == q);
}
+
+ thread_new_segment(tid);
+ s_barrier_segment_creation_count++;
+
VG_(OSetGen_ResetIter)(p->oset);
for ( ; (r = VG_(OSetGen_Next)(p->oset)) != 0; )
{
@@ -398,9 +402,6 @@
}
}
- thread_new_segment(tid);
- s_barrier_segment_creation_count++;
-
if (--p->post_waiters_left <= 0)
{
p->post_iteration = 1 - p->post_iteration;
Modified: branches/VALGRIND_3_4_BRANCH/drd/drd_gomp_intercepts.c
===================================================================
--- branches/VALGRIND_3_4_BRANCH/drd/drd_gomp_intercepts.c 2009-06-06 18:09:09 UTC (rev 10269)
+++ branches/VALGRIND_3_4_BRANCH/drd/drd_gomp_intercepts.c 2009-06-06 19:22:26 UTC (rev 10270)
@@ -59,6 +59,8 @@
// Function definitions.
+#if 0
+
GOMP_FUNC(void, gompZubarrierZuinit, // gomp_barrier_init
gomp_barrier_t* barrier, unsigned count)
{
@@ -115,3 +117,5 @@
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_BARRIER_WAIT,
barrier, gomp_barrier, 1, 0, 0);
}
+
+#endif
Modified: branches/VALGRIND_3_4_BRANCH/drd/drd_main.c
===================================================================
--- branches/VALGRIND_3_4_BRANCH/drd/drd_main.c 2009-06-06 18:09:09 UTC (rev 10269)
+++ branches/VALGRIND_3_4_BRANCH/drd/drd_main.c 2009-06-06 19:22:26 UTC (rev 10270)
@@ -646,9 +646,10 @@
{
tl_assert(IsValidDrdThreadId(drd_joiner));
tl_assert(IsValidDrdThreadId(drd_joinee));
+
+ thread_new_segment(drd_joiner);
+ thread_combine_vc(drd_joiner, drd_joinee);
thread_new_segment(drd_joinee);
- thread_combine_vc(drd_joiner, drd_joinee);
- thread_new_segment(drd_joiner);
if (s_drd_trace_fork_join)
{
Modified: branches/VALGRIND_3_4_BRANCH/drd/drd_mutex.c
===================================================================
--- branches/VALGRIND_3_4_BRANCH/drd/drd_mutex.c 2009-06-06 18:09:09 UTC (rev 10269)
+++ branches/VALGRIND_3_4_BRANCH/drd/drd_mutex.c 2009-06-06 19:22:26 UTC (rev 10270)
@@ -301,13 +301,14 @@
{
const DrdThreadId last_owner = p->owner;
+ thread_new_segment(drd_tid);
+ s_mutex_segment_creation_count++;
+
if (last_owner != drd_tid && last_owner != DRD_INVALID_THREADID)
{
tl_assert(p->last_locked_segment);
thread_combine_vc2(drd_tid, &p->last_locked_segment->vc);
}
- thread_new_segment(drd_tid);
- s_mutex_segment_creation_count++;
p->owner = drd_tid;
p->acquiry_time_ms = VG_(read_millisecond_timer)();
Modified: branches/VALGRIND_3_4_BRANCH/drd/drd_rwlock.c
===================================================================
--- branches/VALGRIND_3_4_BRANCH/drd/drd_rwlock.c 2009-06-06 18:09:09 UTC (rev 10269)
+++ branches/VALGRIND_3_4_BRANCH/drd/drd_rwlock.c 2009-06-06 19:22:26 UTC (rev 10270)
@@ -368,10 +368,10 @@
q = lookup_or_insert_node(p->thread_info, drd_tid);
if (++q->reader_nesting_count == 1)
{
- rwlock_combine_other_vc(p, drd_tid, False);
q->last_lock_was_writer_lock = False;
thread_new_segment(drd_tid);
s_rwlock_segment_creation_count++;
+ rwlock_combine_other_vc(p, drd_tid, False);
p->acquiry_time_ms = VG_(read_millisecond_timer)();
p->acquired_at = VG_(record_ExeContext)(VG_(get_running_tid)(), 0);
@@ -446,9 +446,9 @@
q->writer_nesting_count++;
q->last_lock_was_writer_lock = True;
tl_assert(q->writer_nesting_count == 1);
- rwlock_combine_other_vc(p, drd_tid, True);
thread_new_segment(drd_tid);
s_rwlock_segment_creation_count++;
+ rwlock_combine_other_vc(p, drd_tid, True);
p->acquiry_time_ms = VG_(read_millisecond_timer)();
p->acquired_at = VG_(record_ExeContext)(VG_(get_running_tid)(), 0);
}
Modified: branches/VALGRIND_3_4_BRANCH/drd/drd_semaphore.c
===================================================================
--- branches/VALGRIND_3_4_BRANCH/drd/drd_semaphore.c 2009-06-06 18:09:09 UTC (rev 10269)
+++ branches/VALGRIND_3_4_BRANCH/drd/drd_semaphore.c 2009-06-06 19:22:26 UTC (rev 10270)
@@ -227,9 +227,17 @@
p = 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 = { semaphore };
+ VG_(maybe_record_error)(VG_(get_running_tid)(),
+ SemaphoreErr,
+ VG_(get_IP)(VG_(get_running_tid)()),
+ "Invalid semaphore",
+ &sei);
+ }
}
/** Called after sem_wait() finished.
@@ -253,13 +261,22 @@
p ? p->value : 0,
p ? p->value - 1 : 0);
}
- tl_assert(p);
- tl_assert(p->waiters > 0);
- p->waiters--;
- tl_assert((int)p->waiters >= 0);
- tl_assert((int)p->value >= 0);
- if (p->value == 0)
+
+ if (p)
{
+ p->waiters--;
+ p->value--;
+ }
+
+ /*
+ * Note: if another thread destroyed and reinitialized a semaphore while
+ * the current thread was waiting in sem_wait, p->waiters may have been
+ * set to zero by semaphore_initialize() after
+ * semaphore_pre_wait() has finished before
+ * semaphore_post_wait() has been called.
+ */
+ if (p == NULL || (int)p->value < 0 || (int)p->waiters < 0)
+ {
SemaphoreErrInfo sei = { semaphore };
VG_(maybe_record_error)(VG_(get_running_tid)(),
SemaphoreErr,
@@ -268,8 +285,7 @@
&sei);
return;
}
- p->value--;
- tl_assert((int)p->value >= 0);
+
if (p->waits_to_skip > 0)
p->waits_to_skip--;
else
@@ -278,14 +294,15 @@
tl_assert(sg);
if (sg)
{
+ thread_new_segment(tid);
+ s_semaphore_segment_creation_count++;
+
if (p->last_sem_post_tid != tid
&& p->last_sem_post_tid != DRD_INVALID_THREADID)
{
thread_combine_vc2(tid, &sg->vc);
}
sg_put(sg);
- thread_new_segment(tid);
- s_semaphore_segment_creation_count++;
}
}
}
@@ -310,11 +327,11 @@
}
p->last_sem_post_tid = tid;
- thread_new_segment(tid);
sg = 0;
thread_get_latest_segment(&sg, tid);
tl_assert(sg);
segment_push(p, sg);
+ thread_new_segment(tid);
s_semaphore_segment_creation_count++;
}
Modified: branches/VALGRIND_3_4_BRANCH/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3
===================================================================
--- branches/VALGRIND_3_4_BRANCH/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3 2009-06-06 18:09:09 UTC (rev 10269)
+++ branches/VALGRIND_3_4_BRANCH/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3 2009-06-06 19:22:26 UTC (rev 10270)
@@ -134,11 +134,11 @@
semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:228)
-[1/1] semaphore_post 0x........ value 0 -> 1
+[1/1] semaphore_post 0x........ value 4294967295 -> 0
FIXME: can't figure out how to verify wrap of sem_post
-[1/1] semaphore_destroy 0x........ value 1
+[1/1] semaphore_destroy 0x........ value 0
------------ dealloc of mem holding locks ------------
Modified: branches/VALGRIND_3_4_BRANCH/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3-b
===================================================================
--- branches/VALGRIND_3_4_BRANCH/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3-b 2009-06-06 18:09:09 UTC (rev 10269)
+++ branches/VALGRIND_3_4_BRANCH/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3-b 2009-06-06 19:22:26 UTC (rev 10270)
@@ -148,11 +148,11 @@
semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:228)
-[1/1] semaphore_post 0x........ value 0 -> 1
+[1/1] semaphore_post 0x........ value 4294967295 -> 0
FIXME: can't figure out how to verify wrap of sem_post
-[1/1] semaphore_destroy 0x........ value 1
+[1/1] semaphore_destroy 0x........ value 0
------------ dealloc of mem holding locks ------------
Modified: branches/VALGRIND_3_4_BRANCH/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.5
===================================================================
--- branches/VALGRIND_3_4_BRANCH/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.5 2009-06-06 18:09:09 UTC (rev 10269)
+++ branches/VALGRIND_3_4_BRANCH/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.5 2009-06-06 19:22:26 UTC (rev 10270)
@@ -133,11 +133,11 @@
semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:228)
-[1/1] semaphore_post 0x........ value 0 -> 1
+[1/1] semaphore_post 0x........ value 4294967295 -> 0
FIXME: can't figure out how to verify wrap of sem_post
-[1/1] semaphore_destroy 0x........ value 1
+[1/1] semaphore_destroy 0x........ value 0
------------ dealloc of mem holding locks ------------
Modified: branches/VALGRIND_3_4_BRANCH/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.5-ppc
===================================================================
--- branches/VALGRIND_3_4_BRANCH/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.5-ppc 2009-06-06 18:09:09 UTC (rev 10269)
+++ branches/VALGRIND_3_4_BRANCH/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.5-ppc 2009-06-06 19:22:26 UTC (rev 10270)
@@ -133,11 +133,11 @@
semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:228)
-[1/1] semaphore_post 0x........ value 0 -> 1
+[1/1] semaphore_post 0x........ value 4294967295 -> 0
FIXME: can't figure out how to verify wrap of sem_post
-[1/1] semaphore_destroy 0x........ value 1
+[1/1] semaphore_destroy 0x........ value 0
------------ dealloc of mem holding locks ------------
Modified: branches/VALGRIND_3_4_BRANCH/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.8
===================================================================
--- branches/VALGRIND_3_4_BRANCH/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.8 2009-06-06 18:09:09 UTC (rev 10269)
+++ branches/VALGRIND_3_4_BRANCH/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.8 2009-06-06 19:22:26 UTC (rev 10270)
@@ -126,11 +126,11 @@
semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:228)
-[1/1] semaphore_post 0x........ value 0 -> 1
+[1/1] semaphore_post 0x........ value 4294967295 -> 0
FIXME: can't figure out how to verify wrap of sem_post
-[1/1] semaphore_destroy 0x........ value 1
+[1/1] semaphore_destroy 0x........ value 0
------------ dealloc of mem holding locks ------------
Modified: branches/VALGRIND_3_4_BRANCH/glibc-2.X-drd.supp
===================================================================
--- branches/VALGRIND_3_4_BRANCH/glibc-2.X-drd.supp 2009-06-06 18:09:09 UTC (rev 10269)
+++ branches/VALGRIND_3_4_BRANCH/glibc-2.X-drd.supp 2009-06-06 19:22:26 UTC (rev 10270)
@@ -262,7 +262,6 @@
gomp
drd:ConflictingAccess
obj:/usr/lib*/libgomp.so*
- obj:/usr/lib*/libgomp.so*
}
{
libX11-XCreateFontSet
|