SoC: help with LISTs and killing procs

Brooks Davis brooks at one-eyed-alien.net
Thu Aug 10 15:24:09 UTC 2006


On Thu, Aug 10, 2006 at 05:16:17PM +0200, Divacky Roman wrote:
> hi
> 
> I am doing this:
> 
> (pseudocode)
> LIST_FOREACH_SAFE(em, &td_em->shared->threads, threads, tmp_em) {
> 
> 	kill(em, SIGKILL);
> }
> 
> kill(SIGKILL) calls exit() which calls my exit_hook()
> 
> my exit_hook() does LIST_REMOVE(em, threads).
> 
> the problem is that this is not synchronous so I am getting a panic by INVARIANTS
> that "Bad link elm prev->next != elm". This is because I list 1st item in the list
> I call kill on it, then process 2nd list, then scheduler preempts my code and calls
> exit() on the first proc which removes the first entry and bad things happen. 
> 
> I see this possible solutions:
> 
> make this synchronous, it can be done by something like:
> 
>     ....
>     kill(em, SIGKILL);
>     wait_for_proc_to_vanish();
> 
> pls. tell me what do you think about this solution and if its correct what is the wait_for_proc_to_vanish()
> 
> maybe there's some better solution, pls tell me.

It sounds like you need a lock protecting the list.  If you held it over
the whole loop you could signal all processes before the exit_hook could
remove any.

-- Brooks
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20060810/6c489bad/attachment.pgp


More information about the freebsd-hackers mailing list