Date: Sun, 12 Oct 2008 18:49:07 +0000 (UTC) From: Robert Watson <rwatson@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org Subject: svn commit: r183804 - in stable/7/sys: . kern Message-ID: <200810121849.m9CIn7eX052645@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: rwatson Date: Sun Oct 12 18:49:07 2008 New Revision: 183804 URL: http://svn.freebsd.org/changeset/base/183804 Log: Merge r183661 from head to stable/7: 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. Approved by: re (gnn) Modified: stable/7/sys/ (props changed) stable/7/sys/kern/sys_socket.c Modified: stable/7/sys/kern/sys_socket.c ============================================================================== --- stable/7/sys/kern/sys_socket.c Sun Oct 12 12:08:09 2008 (r183803) +++ stable/7/sys/kern/sys_socket.c Sun Oct 12 18:49:07 2008 (r183804) @@ -237,17 +237,16 @@ soo_stat(struct file *fp, struct stat *u /* * 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);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200810121849.m9CIn7eX052645>