Преглед изворни кода

conn: release the stream when recieving an error

When exec recvieves an error from recv via call.resp it should release
the stream if it is done with it, but only if the connection was not
closed due to the error. This is to avoid potential issues if a response
comes back on a stream.
Chris Bannister пре 10 година
родитељ
комит
3233d7ba31
1 измењених фајлова са 7 додато и 0 уклоњено
  1. 7 0
      conn.go

+ 7 - 0
conn.go

@@ -468,6 +468,13 @@ func (c *Conn) exec(req frameWriter, tracer Tracer) (frame, error) {
 	select {
 	case err := <-call.resp:
 		if err != nil {
+			if !c.Closed() {
+				// if the connection is closed then we cant release the stream,
+				// this is because the request is still outstanding and we have
+				// been handed another error from another stream which caused the
+				// connection to close.
+				c.releaseStream(stream)
+			}
 			return nil, err
 		}
 	case <-time.After(c.timeout):