]> Cypherpunks repositories - gostls13.git/commitdiff
internal/poll: fix deadlock in Write if len(buf) > maxRW
authorWèi Cōngruì <crvv.mail@gmail.com>
Wed, 6 Mar 2019 03:23:46 +0000 (03:23 +0000)
committerIan Lance Taylor <iant@golang.org>
Wed, 6 Mar 2019 18:25:59 +0000 (18:25 +0000)
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 <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/internal/poll/fd_windows.go

index eeef5a78d3a2cc3b8229425ad1298ba15ac8536c..f666b061e2d5bdcd725b778ce5ffc0bac673e8aa 100644 (file)
@@ -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)