Commit 29b631e6 authored by Tobias Klauser's avatar Tobias Klauser Committed by Brad Fitzpatrick

net: update file read position after sendfile syscall

On dragonfly, freebsd and solaris the sendfile syscall does not update
the read position of the source fd. Update it after sendfile so
successive calls start at the correct position.

Fixes #25809

Change-Id: Iaac79f89704b75b8038d4bb60eaf793a262cdd8f
Reviewed-on: https://go-review.googlesource.com/117895
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
parent 9ef9765c
......@@ -13,7 +13,6 @@ import (
"fmt"
"io"
"os"
"runtime"
"testing"
)
......@@ -94,11 +93,6 @@ func TestSendfile(t *testing.T) {
}
func TestSendfileParts(t *testing.T) {
switch runtime.GOOS {
case "dragonfly", "freebsd", "solaris":
t.Skipf("skipping on %s (see golang.org/issue/25809 for details)", runtime.GOOS)
}
ln, err := newLocalListener("tcp")
if err != nil {
t.Fatal(err)
......
......@@ -63,5 +63,11 @@ func sendFile(c *netFD, r io.Reader) (written int64, err error, handled bool) {
if lr != nil {
lr.N = remain - written
}
_, err1 := f.Seek(written, io.SeekCurrent)
if err1 != nil && err == nil {
return written, err1, written > 0
}
return written, wrapSyscallError("sendfile", err), written > 0
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment