xseg_posixfd: Refactor FIFO creation & pipe ops
* Remove retry loop in FIFO creation. If FIFO already exist's do not unlink and re-create the named pipe. Also note that mkfifo() is thread-safe and async-cancel-safe. * As it happens with pipes, writing to a FIFO with no connected readers will fail with EPIPE and also deliver a SIGPIPE signal to the writer. Reading from a FIFO with no connected writers will return an EOF to the reader. Setting the O_RDWR flag while opening the pipe will create an equal number of connected readers/writers to the kernel and will ensure that both are above zero. This implementation will NEVER block since the process can at least talk to itself. ** POSIX.1 leaves this case "undefined" when O_NONBLOCK is set. ** * Drain the pipe even if the call was interrupted by a signal before any data was read. Optimize drain loop to make the minimum number of read syscall's. * Write to the pipe even if the call was interrupted by a signal before any data was written.
Showing with 47 additions and 25 deletions