diff options
author | jdp <jdp@FreeBSD.org> | 2000-12-17 20:50:22 +0000 |
---|---|---|
committer | jdp <jdp@FreeBSD.org> | 2000-12-17 20:50:22 +0000 |
commit | 9173a756868397c51dfb5b6a553ca0fbc82a3d68 (patch) | |
tree | 7279df75ea57c04f633f2d5c76f76213db8e43f9 /sys/net | |
parent | 0449442242597d58974a27bcb6217c8798ae9499 (diff) | |
download | FreeBSD-src-9173a756868397c51dfb5b6a553ca0fbc82a3d68.zip FreeBSD-src-9173a756868397c51dfb5b6a553ca0fbc82a3d68.tar.gz |
Fix bug: a read() on a bpf device which was in non-blocking mode
and had no data available returned 0. Now it returns -1 with errno
set to EWOULDBLOCK (== EAGAIN) as it should. This fix makes the bpf
device usable in threaded programs.
Reviewed by: bde
Diffstat (limited to 'sys/net')
-rw-r--r-- | sys/net/bpf.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/sys/net/bpf.c b/sys/net/bpf.c index d2eaa39..12e375e 100644 --- a/sys/net/bpf.c +++ b/sys/net/bpf.c @@ -500,11 +500,12 @@ bpfread(dev, uio, ioflag) return (ENXIO); } - if (ioflag & IO_NDELAY) - error = EWOULDBLOCK; - else - error = BPF_SLEEP((caddr_t)d, PRINET|PCATCH, "bpf", - d->bd_rtout); + if (ioflag & IO_NDELAY) { + splx(s); + return (EWOULDBLOCK); + } + error = BPF_SLEEP((caddr_t)d, PRINET|PCATCH, "bpf", + d->bd_rtout); if (error == EINTR || error == ERESTART) { splx(s); return (error); |