From 58f7ce962c8558d9585ee45bae337a2d6c2d0cd8 Mon Sep 17 00:00:00 2001 From: Robert Watson Date: Tue, 7 Oct 2008 07:10:28 +0000 Subject: [PATCH] Lock receive socket buffer in soo_stat() rather than commenting that we should lock it, which may marginally improve the consistency of the results. Remove comment. MFC after: 3 days --- sys/kern/sys_socket.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/sys/kern/sys_socket.c b/sys/kern/sys_socket.c index aeeaf33f46c9..813b1ddea617 100644 --- a/sys/kern/sys_socket.c +++ b/sys/kern/sys_socket.c @@ -246,17 +246,16 @@ soo_stat(struct file *fp, struct stat *ub, struct ucred *active_cred, /* * If SBS_CANTRCVMORE is set, but there's still data left in the * receive buffer, the socket is still readable. - * - * XXXRW: perhaps should lock socket buffer so st_size result is - * consistent. */ - /* Unlocked read. */ + SOCKBUF_LOCK(&so->so_rcv); if ((so->so_rcv.sb_state & SBS_CANTRCVMORE) == 0 || so->so_rcv.sb_cc != 0) ub->st_mode |= S_IRUSR | S_IRGRP | S_IROTH; + ub->st_size = so->so_rcv.sb_cc - so->so_rcv.sb_ctl; + SOCKBUF_UNLOCK(&so->so_rcv); + /* Unlocked read. */ if ((so->so_snd.sb_state & SBS_CANTSENDMORE) == 0) ub->st_mode |= S_IWUSR | S_IWGRP | S_IWOTH; - ub->st_size = so->so_rcv.sb_cc - so->so_rcv.sb_ctl; ub->st_uid = so->so_cred->cr_uid; ub->st_gid = so->so_cred->cr_gid; return (*so->so_proto->pr_usrreqs->pru_sense)(so, ub);