diff options
author | Robert Watson <rwatson@FreeBSD.org> | 2004-06-24 00:54:26 +0000 |
---|---|---|
committer | Robert Watson <rwatson@FreeBSD.org> | 2004-06-24 00:54:26 +0000 |
commit | adb4cf0fbcc101a8e3c0b39ccab53a7474472fbb (patch) | |
tree | 68c6cda2ee73f6a54d0790bf313278aae6cb17c6 /sys/kern/uipc_socket.c | |
parent | 80f0e4c2650ea46a807d697b768eb6599231a179 (diff) | |
download | src-adb4cf0fbcc101a8e3c0b39ccab53a7474472fbb.tar.gz src-adb4cf0fbcc101a8e3c0b39ccab53a7474472fbb.zip |
Slide socket buffer lock earlier in sopoll() to cover the call into
selrecord(), setting up select and flagging the socker buffers as SB_SEL
and setting up select under the lock.
Notes
Notes:
svn path=/head/; revision=131005
Diffstat (limited to 'sys/kern/uipc_socket.c')
-rw-r--r-- | sys/kern/uipc_socket.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c index 5a7e4a309340..fe99fe743588 100644 --- a/sys/kern/uipc_socket.c +++ b/sys/kern/uipc_socket.c @@ -1884,15 +1884,15 @@ sopoll(struct socket *so, int events, struct ucred *active_cred, if (events & (POLLIN | POLLINIGNEOF | POLLPRI | POLLRDNORM | POLLRDBAND)) { - selrecord(td, &so->so_rcv.sb_sel); 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)) { - selrecord(td, &so->so_snd.sb_sel); SOCKBUF_LOCK(&so->so_snd); + selrecord(td, &so->so_snd.sb_sel); so->so_snd.sb_flags |= SB_SEL; SOCKBUF_UNLOCK(&so->so_snd); } |