svn commit: r183804 - in stable/7/sys: . kern
Robert Watson
rwatson at FreeBSD.org
Sun Oct 12 18:49:07 UTC 2008
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);
More information about the svn-src-all
mailing list