Index: uipc_socket.c =================================================================== RCS file: /home/ncvs/src/sys/kern/uipc_socket.c,v retrieving revision 1.211 diff -u -r1.211 uipc_socket.c --- uipc_socket.c 24 Aug 2004 05:28:18 -0000 1.211 +++ uipc_socket.c 5 Sep 2004 05:03:05 -0000 @@ -2088,6 +2088,8 @@ { int revents = 0; + SOCKBUF_LOCK(&so->so_snd); + SOCKBUF_LOCK(&so->so_rcv); if (events & (POLLIN | POLLRDNORM)) if (soreadable(so)) revents |= events & (POLLIN | POLLRDNORM); @@ -2109,20 +2111,18 @@ if (events & (POLLIN | POLLINIGNEOF | POLLPRI | POLLRDNORM | POLLRDBAND)) { - SOCKBUF_LOCK(&so->so_rcv); selrecord(td, &so->so_rcv.sb_sel); so->so_rcv.sb_flags |= SB_SEL; - SOCKBUF_UNLOCK(&so->so_rcv); } if (events & (POLLOUT | POLLWRNORM)) { - SOCKBUF_LOCK(&so->so_snd); selrecord(td, &so->so_snd.sb_sel); so->so_snd.sb_flags |= SB_SEL; - SOCKBUF_UNLOCK(&so->so_snd); } } + SOCKBUF_UNLOCK(&so->so_rcv); + SOCKBUF_UNLOCK(&so->so_snd); return (revents); }