aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/internal/poll/writev.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/internal/poll/writev.go')
-rw-r--r--libgo/go/internal/poll/writev.go8
1 files changed, 7 insertions, 1 deletions
diff --git a/libgo/go/internal/poll/writev.go b/libgo/go/internal/poll/writev.go
index 04e3522..6050d1f 100644
--- a/libgo/go/internal/poll/writev.go
+++ b/libgo/go/internal/poll/writev.go
@@ -51,7 +51,10 @@ func (fd *FD) Writev(v *[][]byte) (int64, error) {
if len(iovecs) == 0 {
break
}
- fd.iovecs = &iovecs // cache
+ if fd.iovecs == nil {
+ fd.iovecs = new([]syscall.Iovec)
+ }
+ *fd.iovecs = iovecs // cache
var wrote uintptr
wrote, err = writev(fd.Sysfd, iovecs)
@@ -61,6 +64,9 @@ func (fd *FD) Writev(v *[][]byte) (int64, error) {
TestHookDidWritev(int(wrote))
n += int64(wrote)
consume(v, int64(wrote))
+ for i := range iovecs {
+ iovecs[i] = syscall.Iovec{}
+ }
if err != nil {
if err.(syscall.Errno) == syscall.EAGAIN {
if err = fd.pd.waitWrite(fd.isFile); err == nil {