mirror of
https://github.com/opnsense/src.git
synced 2026-04-04 00:45:17 -04:00
Instead of using a simple global++ as the data race, with this change we
perform the increment by loading the global, delaying for a bit and then
storing back the incremented value. If I move the increment outside of the
mutex protected range, I can now see the data race with only 100 iterations
on amd64 in almost all cases. Before this change such a racy test almost
always passed with < 100,000 iterations and only reliably failed with the
current limit of 10 million.
I noticed this poorly written test because the mutex:mutex{2,3} and
timedmutex:mutex{2,3} tests were always timing out on our CheriBSD Jenkins.
Writing good concurrency tests is hard so I won't attempt to do so, but this
change should make the test more likely to fail if pthread_mutex_lock is not
implemented correctly while also significantly reducing the time it takes to
run these four tests. It will also reduce the time it takes for QEMU RISC-V
testsuite runs by almost 40 minutes (out of currently 7 hours).
Reviewed By: brooks, ngie
Differential Revision: https://reviews.freebsd.org/D26473
|
||
|---|---|---|
| .. | ||
| dlopen | ||
| d_mach | ||
| h_atexit.c | ||
| h_cancel.c | ||
| h_common.h | ||
| h_exit.c | ||
| h_resolv.c | ||
| t_atexit.sh | ||
| t_barrier.c | ||
| t_cancel.sh | ||
| t_cond.c | ||
| t_condwait.c | ||
| t_detach.c | ||
| t_equal.c | ||
| t_exit.sh | ||
| t_fork.c | ||
| t_fpu.c | ||
| t_join.c | ||
| t_kill.c | ||
| t_mutex.c | ||
| t_name.c | ||
| t_once.c | ||
| t_preempt.c | ||
| t_resolv.sh | ||
| t_rwlock.c | ||
| t_sem.c | ||
| t_sigalarm.c | ||
| t_siglongjmp.c | ||
| t_sigmask.c | ||
| t_sigsuspend.c | ||
| t_sleep.c | ||
| t_swapcontext.c | ||
| t_timedmutex.c | ||