Module Name: src Committed By: christos Date: Tue May 9 21:15:30 UTC 2017
Modified Files: src/lib/libpuffs: framebuf.c Log Message: Only add a write filter for sockets. It is not supported for vnodes, or for 1/2 closed fifos (which we both have now). To generate a diff of this commit: cvs rdiff -u -r1.32 -r1.33 src/lib/libpuffs/framebuf.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libpuffs/framebuf.c diff -u src/lib/libpuffs/framebuf.c:1.32 src/lib/libpuffs/framebuf.c:1.33 --- src/lib/libpuffs/framebuf.c:1.32 Mon Jun 25 18:32:47 2012 +++ src/lib/libpuffs/framebuf.c Tue May 9 17:15:30 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: framebuf.c,v 1.32 2012/06/25 22:32:47 abs Exp $ */ +/* $NetBSD: framebuf.c,v 1.33 2017/05/09 21:15:30 christos Exp $ */ /* * Copyright (c) 2007 Antti Kantee. All Rights Reserved. @@ -35,7 +35,7 @@ #include <sys/cdefs.h> #if !defined(lint) -__RCSID("$NetBSD: framebuf.c,v 1.32 2012/06/25 22:32:47 abs Exp $"); +__RCSID("$NetBSD: framebuf.c,v 1.33 2017/05/09 21:15:30 christos Exp $"); #endif /* !lint */ #include <sys/types.h> @@ -807,15 +807,22 @@ puffs__framev_addfd_ctrl(struct puffs_us readenable = EV_DISABLE; if (pu->pu_state & PU_INLOOP) { - EV_SET(&kev[0], fd, EVFILT_READ, + struct stat st; + size_t nf = 0; + + if (fstat(fd, &st) == -1) + goto out; + EV_SET(&kev[nf], fd, EVFILT_READ, EV_ADD|readenable, 0, 0, (intptr_t)fio); - EV_SET(&kev[1], fd, EVFILT_WRITE, - EV_ADD|EV_DISABLE, 0, 0, (intptr_t)fio); - rv = kevent(pu->pu_kq, kev, 2, NULL, 0, NULL); - if (rv == -1) { - free(fio); - return -1; + nf++; + if (S_ISSOCK(st.st_mode)) { + EV_SET(&kev[nf], fd, EVFILT_WRITE, + EV_ADD|EV_DISABLE, 0, 0, (intptr_t)fio); + nf++; } + rv = kevent(pu->pu_kq, kev, nf, NULL, 0, NULL); + if (rv == -1) + goto out; } if (what & PUFFS_FBIO_READ) fio->stat |= FIO_ENABLE_R; @@ -826,6 +833,9 @@ puffs__framev_addfd_ctrl(struct puffs_us pu->pu_nevs = nevs; return 0; +out: + free(fio); + return -1; } int