Fixes sys_waitpid() to handle concurrent waiters
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 5 Nov 2012 16:11:07 +0000 (08:11 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 5 Nov 2012 17:07:17 +0000 (09:07 -0800)
commit7d9c5dc197258af17f3fab8840ffc678fdc0f255
treeaf55b452e481532b74aa6077efb83d0fec2e63e0
parent920fd7a7a750d5468b4d92c12b4a0c7cc00eadfc
Fixes sys_waitpid() to handle concurrent waiters

As mentioned before, we could have concurrent syscalls from the parent
waiting on a child or any child.  The issues were trying to reap a child
that has been already reaped (by a -1 or a particular wait call), and
having the children list get emptied while sleeping (for waitpid(-1)).
Additionally, we had to be careful about syscalls blocking and never
getting a wakeup signal.

None of our apps do multiple waiting syscalls, so I haven't tested the
corner cases.

This all is an example of complications arising with concurrent syscalls in
code that would be easier with just synchronous SCPs.  Not a
deal-breaker, just a minor pain.
kern/include/process.h
kern/src/process.c
kern/src/syscall.c