Use PROC_DYING_ABORT for aborting syscalls
authorBarret Rhoden <brho@cs.berkeley.edu>
Sun, 31 Jul 2016 20:47:59 +0000 (16:47 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 1 Aug 2016 18:57:11 +0000 (11:57 -0700)
commit4a63f6ca874eb572900ac134b99decae56c2e2ed
tree8cff06e7142f0e74a3beb30374d550e7e386dcfb
parentf10bf40001fe30b96245d68896d9c4db55d794bd
Use PROC_DYING_ABORT for aborting syscalls

The reason for all this is that some devices (#mnt) issue syscalls when
closing the FD, and those syscalls could block.  If we were DYING, those
syscalls would immediately abort.  #mnt didn't handle this well, and
went into an infinite loop.

The root of the problem is that we want the process to be dying, but we
don't want its syscalls to abort immediately.  We *do* want them to
abort at some point (I think).

We previously split the DYING state into DYING and DYING_ABORT.  All
code that cared about DYING also cared about DYING and DYING_ABORT.  Now
the actual abort code only checks DYING_ABORT, and not DYING.

One subtle change is that we close the FDT *after* aborting syscalls.
Previously we aborted syscalls first.  Devices should have no problem
with closes with outstanding syscalls - for instance, a close while
someone is blocked on an FD.  The user shouldn't do that, but they
could, so devices should be ready.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/src/kthread.c
kern/src/process.c