From 7c7d6b461cb10872c1138a0d7f3acf9a41b5c353 Mon Sep 17 00:00:00 2001 From: Simon Ferquel Date: Fri, 17 Mar 2017 16:57:20 +0100 Subject: [PATCH] Flush file buffers on CloseWrite This forces any pending data to be sent to the remote party before emitting the 0-length EOF message, to make sure it appears as a seperate message. This fixes the "TestEchoWithMessaging" test Signed-off-by: Simon Ferquel --- file.go | 4 ++++ pipe.go | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/file.go b/file.go index 8c15e41..231863c 100644 --- a/file.go +++ b/file.go @@ -219,3 +219,7 @@ func (f *win32File) SetWriteDeadline(t time.Time) error { f.writeDeadline = t return nil } + +func (f *win32File) Flush() error { + return syscall.FlushFileBuffers(f.handle) +} diff --git a/pipe.go b/pipe.go index b85b2ee..e1b0258 100644 --- a/pipe.go +++ b/pipe.go @@ -87,7 +87,11 @@ func (f *win32MessageBytePipe) CloseWrite() error { if f.writeClosed { return errPipeWriteClosed } - _, err := f.win32File.Write(nil) + err := f.win32File.Flush() + if err != nil { + return err + } + _, err = f.win32File.Write(nil) if err != nil { return err }