Resurfacing...
I put together some "steamroller" race tests, that race a pair of
operations (e.g., kill() and exit()) against each other, varying
the start times of each operation in an attempt to find any destructive
races between the two operations. There are but five pairs of operations
coded up thus far, wanted to get thoughts and suggestions. (Forget
about continuously varying the start time of three operations unless
you are quite a bit more patient than am I -- it already takes several
minutes to run some of the tests.)
I have no idea where to put this, so, for the moment have attached a
bzip2-ed tarball.
This actually does find problems with the RCU'ed signal paths, and am
thinking of solutions, none of which are particularly attractive.
One is to "lock down" tasks that might receive the signal, but this
gets complicated and ugly quickly. Another is to create a new per-task
lock that must be held when changing the "shape" of the task -- RCU
still protects the task list and the sighand structure, but the race
with (say) reparenting is protected by the new lock.
Thoughts?
Thanx, Paul