{
tl_assert(barrier != 0);
tl_assert(barrier_type == pthread_barrier || barrier_type == gomp_barrier);
- tl_assert(count > 0);
tl_assert(p->a1 == barrier);
p->cleanup = (void(*)(DrdClientobj*))barrier_cleanup;
tl_assert(barrier_type == pthread_barrier || barrier_type == gomp_barrier);
+ if (count == 0)
+ {
+ BarrierErrInfo bei = { barrier };
+ VG_(maybe_record_error)(VG_(get_running_tid)(),
+ BarrierErr,
+ VG_(get_IP)(VG_(get_running_tid)()),
+ "pthread_barrier_init: 'count' argument is zero",
+ &bei);
+ }
+
if (! reinitialization && barrier_type == pthread_barrier)
{
p = barrier_get(barrier);
VG_(maybe_record_error)(VG_(get_running_tid)(),
BarrierErr,
VG_(get_IP)(VG_(get_running_tid)()),
- "Barrier reinitializatoin",
+ "Barrier reinitialization",
&bei);
}
}