# HG changeset patch # User ethindra # Date 1172869553 28800 # Node ID fa3ac017d2f9848cf402c6f0423e50b6fd6c363c # Parent 3bb8981611ec2434460996f0a40eaa011f29981a 6524270 recvfrom(MSG_DONTWAIT) blocks if beaten by a reader diff -r 3bb8981611ec -r fa3ac017d2f9 usr/src/uts/common/fs/sockfs/socksctp.c --- 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); diff -r 3bb8981611ec -r fa3ac017d2f9 usr/src/uts/common/fs/sockfs/socksdp.c --- 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); diff -r 3bb8981611ec -r fa3ac017d2f9 usr/src/uts/common/fs/sockfs/socktpi.c --- 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);