On Mon, Oct 06, 2014 at 04:56:08PM -0600, Todd C. Miller wrote: > The following diff should fix it. > > - todd > > Index: sys/miscfs/fifofs/fifo_vnops.c > =================================================================== > RCS file: /home/cvs/openbsd/src/sys/miscfs/fifofs/fifo_vnops.c,v > retrieving revision 1.41 > diff -u -r1.41 fifo_vnops.c > --- sys/miscfs/fifofs/fifo_vnops.c 14 Sep 2014 14:17:26 -0000 1.41 > +++ sys/miscfs/fifofs/fifo_vnops.c 6 Oct 2014 22:51:50 -0000 > @@ -147,8 +147,8 @@ > return (error); > } > fip->fi_readers = fip->fi_writers = 0; > + wso->so_state |= SS_CANTSENDMORE; > wso->so_snd.sb_lowat = PIPE_BUF; > - rso->so_state |= SS_CANTRCVMORE; > } > if (ap->a_mode & FREAD) { > fip->fi_readers++; > @@ -287,24 +287,12 @@ > { > struct vop_poll_args *ap = v; > struct file filetmp; > - short ostate; > int revents = 0; > > if (ap->a_events & (POLLIN | POLLPRI | POLLRDNORM | POLLRDBAND)) { > - /* > - * Socket and FIFO poll(2) semantics differ wrt EOF on read. > - * Unlike a normal socket, FIFOs don't care whether or not > - * SS_CANTRCVMORE is set. To get the correct semantics we > - * must clear SS_CANTRCVMORE from so_state temporarily. > - */ > - ostate = ap->a_vp->v_fifoinfo->fi_readsock->so_state; > - if (ap->a_events & (POLLIN | POLLRDNORM)) > - ap->a_vp->v_fifoinfo->fi_readsock->so_state &= > - ~SS_CANTRCVMORE; > filetmp.f_data = ap->a_vp->v_fifoinfo->fi_readsock; > if (filetmp.f_data) > revents |= soo_poll(&filetmp, ap->a_events, ap->a_p); > - ap->a_vp->v_fifoinfo->fi_readsock->so_state = ostate; > } > if (ap->a_events & (POLLOUT | POLLWRNORM | POLLWRBAND)) { > filetmp.f_data = ap->a_vp->v_fifoinfo->fi_writesock;
Thanks, that fixed it!