Add support for EPIPE and SIGPIPE (XCC)
authorKevin Klues <klueska@cs.berkeley.edu>
Tue, 27 Oct 2015 18:05:23 +0000 (11:05 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 16 Nov 2015 23:15:03 +0000 (15:15 -0800)
commit1185c0a68204890d995a35d58b53e10834190356
tree289d5185e1d791d4cd353d33dd162291641a591f
parent79f8ec8aceec98a370a5c60484c41d047137f4e0
Add support for EPIPE and SIGPIPE (XCC)

With this change, we now support proper handling of SIGPIPE.  This
allows us to now run things such as:

$ hexdump -C bin/hexdump | head

However, this only currently works for files in the vfs. Things are
still broken for chans in the 9ns.  For example,

$ hexdump -C mnt/go.cpio | head

will page fault in the kernel with an error of "rpc tags".  The SIGPIPE
is still generated properly. but the call to sys_proc_destroy in the
SIGPIPE signal handler never completes. Specifically, the kernel never
returns from the call to close_fdt() in proc_destroy(). My guess is a
call to cclose() on the fd for 'mnt/go.cpio' is sleeping on its
kref->release(), and never recovering properly.

For now we can ignore this, since a workaround is to just copy the file
into the vfs, but we will need to figure this out eventually.

Signed-off-by: Kevin Klues <klueska@cs.berkeley.edu>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/drivers/dev/pipe.c
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/write.c