diff options
author | 2017-07-20 08:23:43 +0000 | |
---|---|---|
committer | 2017-07-20 08:23:43 +0000 | |
commit | 0c4dcad15f7f252755064e8065f9e053efacf909 (patch) | |
tree | cec3fd039c0a76aa4cca5d6be120fe0d5574f0d8 /sys/kern/uipc_socket.c | |
parent | "no-route" is also shown by -sinfo; (diff) | |
download | wireguard-openbsd-0c4dcad15f7f252755064e8065f9e053efacf909.tar.xz wireguard-openbsd-0c4dcad15f7f252755064e8065f9e053efacf909.zip |
Prepare filt_soread() to be locked. No functionnal change.
ok bluhm@, claudio@, visa@
Diffstat (limited to 'sys/kern/uipc_socket.c')
-rw-r--r-- | sys/kern/uipc_socket.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c index 0373749eeff..c1cca893b2e 100644 --- a/sys/kern/uipc_socket.c +++ b/sys/kern/uipc_socket.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uipc_socket.c,v 1.194 2017/07/13 16:19:38 bluhm Exp $ */ +/* $OpenBSD: uipc_socket.c,v 1.195 2017/07/20 08:23:43 mpi Exp $ */ /* $NetBSD: uipc_socket.c,v 1.21 1996/02/04 02:17:52 christos Exp $ */ /* @@ -1965,22 +1965,27 @@ int filt_soread(struct knote *kn, long hint) { struct socket *so = kn->kn_fp->f_data; + int rv; kn->kn_data = so->so_rcv.sb_cc; #ifdef SOCKET_SPLICE - if (isspliced(so)) - return (0); + if (isspliced(so)) { + rv = 0; + } else #endif /* SOCKET_SPLICE */ if (so->so_state & SS_CANTRCVMORE) { kn->kn_flags |= EV_EOF; kn->kn_fflags = so->so_error; - return (1); + rv = 1; + } else if (so->so_error) { /* temporary udp error */ + rv = 1; + } else if (kn->kn_sfflags & NOTE_LOWAT) { + rv = (kn->kn_data >= kn->kn_sdata); + } else { + rv = (kn->kn_data >= so->so_rcv.sb_lowat); } - if (so->so_error) /* temporary udp error */ - return (1); - if (kn->kn_sfflags & NOTE_LOWAT) - return (kn->kn_data >= kn->kn_sdata); - return (kn->kn_data >= so->so_rcv.sb_lowat); + + return rv; } void |