]> Cypherpunks repositories - gostls13.git/commitdiff
net: fix sendfile for Solaris
authorShawn Walker-Salas <shawn.walker@oracle.com>
Fri, 30 Jun 2017 17:57:04 +0000 (10:57 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Fri, 30 Jun 2017 19:07:13 +0000 (19:07 +0000)
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>
src/internal/poll/sendfile_solaris.go

index 2ce53232085069972f5ab23db66951cb08013718..9093d464834f4fdb88517dd26da26c56fd7d0948 100644 (file)
@@ -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)