aboutsummaryrefslogtreecommitdiff
path: root/sys/net
diff options
context:
space:
mode:
authorGuy Helmer <ghelmer@FreeBSD.org>2013-05-23 21:33:10 +0000
committerGuy Helmer <ghelmer@FreeBSD.org>2013-05-23 21:33:10 +0000
commitd013d9022a816dbb2b12fbb336371c2e0f9cc1a4 (patch)
tree05d2e41009eb185be33a6206b98ce1d3ac9fd58a /sys/net
parent92981fdf9eb48e9023310c8d1783b9188b4b3935 (diff)
downloadsrc-d013d9022a816dbb2b12fbb336371c2e0f9cc1a4.tar.gz
src-d013d9022a816dbb2b12fbb336371c2e0f9cc1a4.zip
While waiting for the bpf hold buffer to become idle, check
the return value from mtx_sleep() and exit bpfread() on errors such as EINTR. Reviewed by: jhb
Notes
Notes: svn path=/head/; revision=250945
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/bpf.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/net/bpf.c b/sys/net/bpf.c
index ce83e4aad27d..cb3ed2716a5e 100644
--- a/sys/net/bpf.c
+++ b/sys/net/bpf.c
@@ -856,9 +856,14 @@ bpfread(struct cdev *dev, struct uio *uio, int ioflag)
callout_stop(&d->bd_callout);
timed_out = (d->bd_state == BPF_TIMED_OUT);
d->bd_state = BPF_IDLE;
- while (d->bd_hbuf_in_use)
- mtx_sleep(&d->bd_hbuf_in_use, &d->bd_lock,
+ while (d->bd_hbuf_in_use) {
+ error = mtx_sleep(&d->bd_hbuf_in_use, &d->bd_lock,
PRINET|PCATCH, "bd_hbuf", 0);
+ if (error != 0) {
+ BPFD_UNLOCK(d);
+ return (error);
+ }
+ }
/*
* If the hold buffer is empty, then do a timed sleep, which
* ends when the timeout expires or when enough packets