Skip to content
  • Chrysostomos Nanakos's avatar
    xseg_posixfd: Refactor FIFO creation & pipe ops · 5792d7d3
    Chrysostomos Nanakos authored
    * 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.
    5792d7d3