changeset 3749:fa3ac017d2f9

6524270 recvfrom(MSG_DONTWAIT) blocks if beaten by a reader
author ethindra
date Fri, 02 Mar 2007 13:05:53 -0800
parents 3bb8981611ec
children 69ec1179f557
files usr/src/uts/common/fs/sockfs/socksctp.c usr/src/uts/common/fs/sockfs/socksdp.c usr/src/uts/common/fs/sockfs/socktpi.c
diffstat 3 files changed, 7 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/fs/sockfs/socksctp.c	Fri Mar 02 12:47:16 2007 -0800
+++ b/usr/src/uts/common/fs/sockfs/socksctp.c	Fri Mar 02 13:05:53 2007 -0800
@@ -847,7 +847,8 @@
 	/*
 	 * Allow just one reader at a time.
 	 */
-	error = so_lock_read_intr(so, uiop->uio_fmode);
+	error = so_lock_read_intr(so,
+	    uiop->uio_fmode | ((flags & MSG_DONTWAIT) ? FNONBLOCK : 0));
 	if (error) {
 		mutex_exit(&so->so_lock);
 		return (error);
--- a/usr/src/uts/common/fs/sockfs/socksdp.c	Fri Mar 02 12:47:16 2007 -0800
+++ b/usr/src/uts/common/fs/sockfs/socksdp.c	Fri Mar 02 13:05:53 2007 -0800
@@ -711,7 +711,8 @@
 	/*
 	 * Allow just one reader at a time.
 	 */
-	error = so_lock_read_intr(so, uiop->uio_fmode);
+	error = so_lock_read_intr(so,
+	    uiop->uio_fmode | ((flags & MSG_DONTWAIT) ? FNONBLOCK : 0));
 	if (error != 0) {
 		mutex_exit(&so->so_lock);
 		return (error);
--- a/usr/src/uts/common/fs/sockfs/socktpi.c	Fri Mar 02 12:47:16 2007 -0800
+++ b/usr/src/uts/common/fs/sockfs/socktpi.c	Fri Mar 02 13:05:53 2007 -0800
@@ -3009,7 +3009,9 @@
 	 * e.g. in the uiomove in kstrgetmsg.
 	 * This difference is not believed to be significant.
 	 */
-	error = so_lock_read_intr(so, uiop->uio_fmode);	/* Set SOREADLOCKED */
+	/* Set SOREADLOCKED */
+	error = so_lock_read_intr(so,
+	    uiop->uio_fmode | ((flags & MSG_DONTWAIT) ? FNONBLOCK : 0));
 	mutex_exit(&so->so_lock);
 	if (error)
 		return (error);