From: Wèi Cōngruì Date: Wed, 6 Mar 2019 03:23:46 +0000 (+0000) Subject: internal/poll: fix deadlock in Write if len(buf) > maxRW X-Git-Tag: go1.13beta1~1186 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=40d8c3d3e81769550bcaf96ec0a3e3308abb8862;p=gostls13.git internal/poll: fix deadlock in Write if len(buf) > maxRW fd.l.Lock shouldn't be called in a loop. Change-Id: I3afbc184aa06a60175c9a39319985b5810ecb144 Reviewed-on: https://go-review.googlesource.com/c/go/+/165598 Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- diff --git a/src/internal/poll/fd_windows.go b/src/internal/poll/fd_windows.go index eeef5a78d3..f666b061e2 100644 --- a/src/internal/poll/fd_windows.go +++ b/src/internal/poll/fd_windows.go @@ -673,6 +673,10 @@ func (fd *FD) Write(buf []byte) (int, error) { return 0, err } defer fd.writeUnlock() + if fd.isFile { + fd.l.Lock() + defer fd.l.Unlock() + } ntotal := 0 for len(buf) > 0 { @@ -683,8 +687,6 @@ func (fd *FD) Write(buf []byte) (int, error) { var n int var err error if fd.isFile { - fd.l.Lock() - defer fd.l.Unlock() switch fd.kind { case kindConsole: n, err = fd.writeConsole(b)