diff options
author | rwatson <rwatson@FreeBSD.org> | 2005-09-13 10:39:24 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2005-09-13 10:39:24 +0000 |
commit | afc7b6e916b3897bb67067a19d53ea1f5129f3c0 (patch) | |
tree | 8deb96ebef1b82b7596d23f5e4861ba0695311fb /sys/fs/fifofs | |
parent | 5dc127c9e22ec7dffdad6513921160d271fb365f (diff) | |
download | FreeBSD-src-afc7b6e916b3897bb67067a19d53ea1f5129f3c0.zip FreeBSD-src-afc7b6e916b3897bb67067a19d53ea1f5129f3c0.tar.gz |
As a result of kqueue locking work, socket buffer locks will always
be held when entering a kqueue filter for fifos via a socket buffer
event: as such, assert the lock unconditionally rather than acquiring
it conditionall.
MFC after: 3 days
Diffstat (limited to 'sys/fs/fifofs')
-rw-r--r-- | sys/fs/fifofs/fifo_vnops.c | 24 |
1 files changed, 6 insertions, 18 deletions
diff --git a/sys/fs/fifofs/fifo_vnops.c b/sys/fs/fifofs/fifo_vnops.c index f0dfd00..fddcabb 100644 --- a/sys/fs/fifofs/fifo_vnops.c +++ b/sys/fs/fifofs/fifo_vnops.c @@ -393,22 +393,16 @@ static int filt_fiforead(struct knote *kn, long hint) { struct socket *so = (struct socket *)kn->kn_hook; - int need_lock, result; - need_lock = !SOCKBUF_OWNED(&so->so_rcv); - if (need_lock) - SOCKBUF_LOCK(&so->so_rcv); + SOCKBUF_LOCK_ASSERT(&so->so_rcv); kn->kn_data = so->so_rcv.sb_cc; if (so->so_rcv.sb_state & SBS_CANTRCVMORE) { kn->kn_flags |= EV_EOF; - result = 1; + return (1); } else { kn->kn_flags &= ~EV_EOF; - result = (kn->kn_data > 0); + return (kn->kn_data > 0); } - if (need_lock) - SOCKBUF_UNLOCK(&so->so_rcv); - return (result); } static void @@ -427,22 +421,16 @@ static int filt_fifowrite(struct knote *kn, long hint) { struct socket *so = (struct socket *)kn->kn_hook; - int need_lock, result; - need_lock = !SOCKBUF_OWNED(&so->so_snd); - if (need_lock) - SOCKBUF_LOCK(&so->so_snd); + SOCKBUF_LOCK_ASSERT(&so->so_snd); kn->kn_data = sbspace(&so->so_snd); if (so->so_snd.sb_state & SBS_CANTSENDMORE) { kn->kn_flags |= EV_EOF; - result = 1; + return (1); } else { kn->kn_flags &= ~EV_EOF; - result = (kn->kn_data >= so->so_snd.sb_lowat); + return (kn->kn_data >= so->so_snd.sb_lowat); } - if (need_lock) - SOCKBUF_UNLOCK(&so->so_snd); - return (result); } static void |