From 5b76ff56750c2c3ec26780af7450e9e6abf53282 Mon Sep 17 00:00:00 2001 From: fanyiguan <52657276+fanyiguang@users.noreply.github.com> Date: Tue, 20 Jul 2021 11:10:24 +0800 Subject: [PATCH] Update npipe_windows.go MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 防止协成泄露 --- npipe_windows.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/npipe_windows.go b/npipe_windows.go index 5e7cf13..012dfea 100755 --- a/npipe_windows.go +++ b/npipe_windows.go @@ -402,15 +402,19 @@ type iodata struct { func (c *PipeConn) completeRequest(data iodata, deadline *time.Time, overlapped *syscall.Overlapped) (int, error) { if data.err == error_io_incomplete || data.err == syscall.ERROR_IO_PENDING { var timer <-chan time.Time + var timeDiff time.Duration if deadline != nil { - if timeDiff := deadline.Sub(time.Now()); timeDiff > 0 { + if timeDiff = deadline.Sub(time.Now()); timeDiff > 0 { timer = time.After(timeDiff) } } done := make(chan iodata) go func() { n, err := waitForCompletion(c.handle, overlapped) - done <- iodata{n, err} + select { + case done <- iodata{n, err}: + case <-time.After(time.Second * timeDiff): + } }() select { case data = <-done: