aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShawn Walker-Salas <shawn.walker@oracle.com>2017-06-30 10:57:04 -0700
committerBrad Fitzpatrick <bradfitz@golang.org>2017-06-30 19:07:13 +0000
commit4b8bfa6352e8f67886dc1cd1eba92b248715bd11 (patch)
tree0249821cbaaf8e39a96200d015aef9dadda0b75e /src
parent990dac2723d67b97692d4d35ac0a96189eeb5a09 (diff)
downloadgo-4b8bfa6352e8f67886dc1cd1eba92b248715bd11.tar.xz
net: fix sendfile for Solaris
If a retryable error such as EAGAIN/EINTR is encountered during a call to sendfile(), we should not assume that a partial write occurred. Instead, just like any other platform, we should always try again even if 0 bytes were written. Fixes #20857 Change-Id: I9aa48d193c27c6794c550320da4d3f7544041f37 Reviewed-on: https://go-review.googlesource.com/47351 Run-TryBot: Shawn Walker-Salas <shawn.walker@oracle.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src')
-rw-r--r--src/internal/poll/sendfile_solaris.go5
1 files changed, 1 insertions, 4 deletions
diff --git a/src/internal/poll/sendfile_solaris.go b/src/internal/poll/sendfile_solaris.go
index 2ce5323208..9093d46483 100644
--- a/src/internal/poll/sendfile_solaris.go
+++ b/src/internal/poll/sendfile_solaris.go
@@ -33,10 +33,7 @@ func SendFile(dstFD *FD, src int, pos, remain int64) (int64, error) {
n, err1 := syscall.Sendfile(dst, src, &pos1, n)
if err1 == syscall.EAGAIN || err1 == syscall.EINTR {
// partial write may have occurred
- if n = int(pos1 - pos); n == 0 {
- // nothing more to write
- err1 = nil
- }
+ n = int(pos1 - pos)
}
if n > 0 {
pos += int64(n)