summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/net/bpf.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/net/bpf.c b/sys/net/bpf.c
index 1678d11..3964d1d 100644
--- a/sys/net/bpf.c
+++ b/sys/net/bpf.c
@@ -1310,6 +1310,7 @@ catchpacket(d, pkt, pktlen, snaplen, cpfn)
struct bpf_hdr *hp;
int totlen, curlen;
int hdrlen = d->bd_bif->bif_hdrlen;
+ int do_wakeup = 0;
/*
* Figure out how many bytes to move. If the packet is
@@ -1340,7 +1341,7 @@ catchpacket(d, pkt, pktlen, snaplen, cpfn)
return;
}
ROTATE_BUFFERS(d);
- bpf_wakeup(d);
+ do_wakeup = 1;
curlen = 0;
}
else if (d->bd_immediate || d->bd_state == BPF_TIMED_OUT)
@@ -1349,7 +1350,7 @@ catchpacket(d, pkt, pktlen, snaplen, cpfn)
* already expired during a select call. A packet
* arrived, so the reader should be woken up.
*/
- bpf_wakeup(d);
+ do_wakeup = 1;
/*
* Append the bpf header.
@@ -1363,6 +1364,9 @@ catchpacket(d, pkt, pktlen, snaplen, cpfn)
*/
(*cpfn)(pkt, (u_char *)hp + hdrlen, (hp->bh_caplen = totlen - hdrlen));
d->bd_slen = curlen + totlen;
+
+ if (do_wakeup)
+ bpf_wakeup(d);
}
/*
OpenPOWER on IntegriCloud