Commit 82afb7ab authored by Andy Goldstein's avatar Andy Goldstein

bump(github.com/docker/spdystream):99515db39d3dad9607e0293f18152f3d59da76dc

Update spdystream to pick up a fix for a deadlock between writing data and a connection closure. Fixes #6490
parent 6ef0f8c3
...@@ -162,7 +162,7 @@ ...@@ -162,7 +162,7 @@
}, },
{ {
"ImportPath": "github.com/docker/spdystream", "ImportPath": "github.com/docker/spdystream",
"Rev": "e731c8f9f19ffd7e51a469a2de1580c1dfbb4fae" "Rev": "99515db39d3dad9607e0293f18152f3d59da76dc"
}, },
{ {
"ImportPath": "github.com/elazarl/go-bindata-assetfs", "ImportPath": "github.com/elazarl/go-bindata-assetfs",
......
...@@ -89,10 +89,25 @@ Loop: ...@@ -89,10 +89,25 @@ Loop:
if timer != nil { if timer != nil {
timer.Stop() timer.Stop()
} }
// Start a goroutine to drain resetChan. This is needed because we've seen
// some unit tests with large numbers of goroutines get into a situation
// where resetChan fills up, at least 1 call to Write() is still trying to
// send to resetChan, the connection gets closed, and this case statement
// attempts to grab the write lock that Write() already has, causing a
// deadlock.
//
// See https://github.com/docker/spdystream/issues/49 for more details.
go func() {
for _ = range resetChan {
}
}()
i.writeLock.Lock() i.writeLock.Lock()
close(resetChan) close(resetChan)
i.resetChan = nil i.resetChan = nil
i.writeLock.Unlock() i.writeLock.Unlock()
break Loop break Loop
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment