Skip site navigation (1)Skip section navigation (2)
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>