aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/net/sendfile_linux.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/net/sendfile_linux.go')
-rw-r--r--libgo/go/net/sendfile_linux.go11
1 files changed, 7 insertions, 4 deletions
diff --git a/libgo/go/net/sendfile_linux.go b/libgo/go/net/sendfile_linux.go
index 7f51519b2ed..a0d53036263 100644
--- a/libgo/go/net/sendfile_linux.go
+++ b/libgo/go/net/sendfile_linux.go
@@ -38,11 +38,13 @@ func sendFile(c *netFD, r io.Reader) (written int64, err error, handled bool) {
c.wio.Lock()
defer c.wio.Unlock()
- c.incref()
+ if err := c.incref(false); err != nil {
+ return 0, err, true
+ }
defer c.decref()
dst := c.sysfd
- src := f.Fd()
+ src := int(f.Fd())
for remain > 0 {
n := maxSendfileSize
if int64(n) > remain {
@@ -57,8 +59,9 @@ func sendFile(c *netFD, r io.Reader) (written int64, err error, handled bool) {
break
}
if err1 == syscall.EAGAIN && c.wdeadline >= 0 {
- pollserver.WaitWrite(c)
- continue
+ if err1 = pollserver.WaitWrite(c); err1 == nil {
+ continue
+ }
}
if err1 != nil {
// This includes syscall.ENOSYS (no kernel