diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 5d03f598428..7d04348152d 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -399,7 +399,7 @@ }, { "ImportPath": "github.com/docker/spdystream", - "Rev": "106e140db2cb50923efe088bf2906b2ee5a45fec" + "Rev": "449fdfce4d962303d702fec724ef0ad181c92528" }, { "ImportPath": "github.com/elazarl/go-bindata-assetfs", diff --git a/Godeps/_workspace/src/github.com/docker/spdystream/stream.go b/Godeps/_workspace/src/github.com/docker/spdystream/stream.go index 189f4310b78..f9e9ee267f8 100644 --- a/Godeps/_workspace/src/github.com/docker/spdystream/stream.go +++ b/Godeps/_workspace/src/github.com/docker/spdystream/stream.go @@ -170,6 +170,11 @@ func (s *Stream) Reset() error { } func (s *Stream) resetStream() error { + // Always call closeRemoteChannels, even if s.finished is already true. + // This makes it so that stream.Close() followed by stream.Reset() allows + // stream.Read() to unblock. + s.closeRemoteChannels() + s.finishLock.Lock() if s.finished { s.finishLock.Unlock() @@ -178,8 +183,6 @@ func (s *Stream) resetStream() error { s.finished = true s.finishLock.Unlock() - s.closeRemoteChannels() - resetFrame := &spdy.RstStreamFrame{ StreamId: s.streamId, Status: spdy.Cancel, @@ -320,7 +323,5 @@ func (s *Stream) closeRemoteChannels() { case <-s.closeChan: default: close(s.closeChan) - s.dataLock.Lock() - defer s.dataLock.Unlock() } }