Forráskód Böngészése

Make Close idempotent

Julien Schmidt 12 éve
szülő
commit
3bb13dbecb
2 módosított fájl, 14 hozzáadás és 5 törlés
  1. 8 3
      connection.go
  2. 6 2
      rows.go

+ 8 - 3
connection.go

@@ -105,11 +105,16 @@ func (mc *mysqlConn) Begin() (driver.Tx, error) {
 }
 
 func (mc *mysqlConn) Close() (err error) {
-	mc.writeCommandPacket(comQuit)
+	// Makes Close idempotent
+	if mc.netConn != nil {
+		mc.writeCommandPacket(comQuit)
+		mc.netConn.Close()
+		mc.netConn = nil
+	}
+
 	mc.cfg = nil
 	mc.buf = nil
-	mc.netConn.Close()
-	mc.netConn = nil
+
 	return
 }
 

+ 6 - 2
rows.go

@@ -43,11 +43,15 @@ func (rows *mysqlRows) Close() (err error) {
 
 	// Remove unread packets from stream
 	if !rows.eof {
-		if rows.mc == nil {
+		if rows.mc == nil || rows.mc.netConn == nil {
 			return errors.New("Invalid Connection")
 		}
 
 		err = rows.mc.readUntilEOF()
+
+		// explicitly set because readUntilEOF might return early in case of an
+		// error
+		rows.eof = true
 	}
 
 	return
@@ -58,7 +62,7 @@ func (rows *mysqlRows) Next(dest []driver.Value) error {
 		return io.EOF
 	}
 
-	if rows.mc == nil {
+	if rows.mc == nil || rows.mc.netConn == nil {
 		return errors.New("Invalid Connection")
 	}