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!

Reply via email to