diff options
author | jb <jb@FreeBSD.org> | 2002-02-22 04:26:54 +0000 |
---|---|---|
committer | jb <jb@FreeBSD.org> | 2002-02-22 04:26:54 +0000 |
commit | de6d708bd1c33997202de8fe4c96e1a92917f1b8 (patch) | |
tree | ccdf66debffb874e50da553fe7dc0652ab34d738 /lib/libc_r | |
parent | 6ae47c1bef8362d817116c7376af5dac2261c399 (diff) | |
download | FreeBSD-src-de6d708bd1c33997202de8fe4c96e1a92917f1b8.zip FreeBSD-src-de6d708bd1c33997202de8fe4c96e1a92917f1b8.tar.gz |
Fix a bug where a short write to a non-blocking socket would
leave the descriptor locked, causing other threads to hang
if they happened to access the socket.
MFC after: 5 days
Diffstat (limited to 'lib/libc_r')
-rw-r--r-- | lib/libc_r/uthread/uthread_sendfile.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/libc_r/uthread/uthread_sendfile.c b/lib/libc_r/uthread/uthread_sendfile.c index 901d523..81dcf63 100644 --- a/lib/libc_r/uthread/uthread_sendfile.c +++ b/lib/libc_r/uthread/uthread_sendfile.c @@ -139,8 +139,11 @@ _sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, /* * If we're not blocking then return. */ - if (!blocking) + if (!blocking) { + _FD_UNLOCK(s, FD_WRITE); + _FD_UNLOCK(fd, FD_READ); goto SHORT_WRITE; + } /* * Otherwise wait on the fd. |