فهرست منبع

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):