diff options
Diffstat (limited to 'libgo/go/net/sendfile_linux.go')
-rw-r--r-- | libgo/go/net/sendfile_linux.go | 11 |
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 |