Mercurial > illumos > illumos-gate
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);