Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 6 Mar 2012 19:46:57 +0000 (UTC)
From:      Andre Oppermann <andre@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r232618 - user/andre/tcp_workqueue/sys/kern
Message-ID:  <201203061946.q26JkvpL054761@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: andre
Date: Tue Mar  6 19:46:57 2012
New Revision: 232618
URL: http://svn.freebsd.org/changeset/base/232618

Log:
  Fix the MSG_WAITALL case by comparing against sb_hiwat.  Before
  it was looping for every receive as sb_lowat normally is zero.
  
  Add comment about issue with (MSG_WAITALL | MSG_PEEK) which isn't
  properly handled.

Modified:
  user/andre/tcp_workqueue/sys/kern/uipc_socket.c

Modified: user/andre/tcp_workqueue/sys/kern/uipc_socket.c
==============================================================================
--- user/andre/tcp_workqueue/sys/kern/uipc_socket.c	Tue Mar  6 19:43:26 2012	(r232617)
+++ user/andre/tcp_workqueue/sys/kern/uipc_socket.c	Tue Mar  6 19:46:57 2012	(r232618)
@@ -1930,6 +1930,7 @@ release:
 
 /*
  * Optimized version of soreceive() for stream (TCP) sockets.
+ * XXXAO: (MSG_WAITALL | MSG_PEEK) isn't properly handled.
  */
 int
 soreceive_stream(struct socket *so, struct sockaddr **psa, struct uio *uio,
@@ -2018,7 +2019,7 @@ restart:
 
 	/* On MSG_WAITALL we must wait until all data or error arrives. */
 	if ((flags & MSG_WAITALL) &&
-	    (sb->sb_cc >= uio->uio_resid || sb->sb_cc >= sb->sb_lowat))
+	    (sb->sb_cc >= uio->uio_resid || sb->sb_cc >= sb->sb_hiwat))
 		goto deliver;
 
 	/*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201203061946.q26JkvpL054761>