test: work around valgrind bug
This commit is contained in:
parent
43d52c77ba
commit
2d1f17fecb
@ -50,6 +50,21 @@ void thread_cb(void *arg) {
|
|||||||
|
|
||||||
r = uv_async_send(&async);
|
r = uv_async_send(&async);
|
||||||
ASSERT(r == 0);
|
ASSERT(r == 0);
|
||||||
|
|
||||||
|
/* Work around a bug in Valgrind.
|
||||||
|
*
|
||||||
|
* Valgrind runs threads not in parallel but sequentially, i.e. one after
|
||||||
|
* the other. It also doesn't preempt them, instead it depends on threads
|
||||||
|
* yielding voluntarily by making a syscall.
|
||||||
|
*
|
||||||
|
* That never happens here: the pipe that is associated with the async
|
||||||
|
* handle is written to once but that's too early for Valgrind's scheduler
|
||||||
|
* to kick in. Afterwards, the thread busy-loops, starving the main thread.
|
||||||
|
* Therefore, we yield.
|
||||||
|
*
|
||||||
|
* This behavior has been observed with Valgrind 3.7.0 and 3.9.0.
|
||||||
|
*/
|
||||||
|
uv_sleep(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user