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
This commit is contained in:
Andy Goldstein 2015-04-09 16:30:47 +00:00
parent 6ef0f8c3c5
commit 82afb7ab1f
2 changed files with 16 additions and 1 deletions

2
Godeps/Godeps.json generated
View File

@ -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",

View File

@ -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
} }
} }