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
This commit is contained in:
John Polstra 2000-12-17 20:50:22 +00:00
parent 61ffadb185
commit fba3cfdef2
1 changed files with 6 additions and 5 deletions

View File

@ -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);