@@ -32,11 +32,11 @@ func (mc *mysqlConn) readPacket() ([]byte, error) {
3232 // read packet header
3333 data , err := mc .buf .readNext (4 )
3434 if err != nil {
35+ mc .close ()
3536 if cerr := mc .canceled .Value (); cerr != nil {
3637 return nil , cerr
3738 }
3839 mc .log (err )
39- mc .Close ()
4040 return nil , ErrInvalidConn
4141 }
4242
@@ -45,7 +45,7 @@ func (mc *mysqlConn) readPacket() ([]byte, error) {
4545
4646 // check packet sync [8 bit]
4747 if data [3 ] != mc .sequence {
48- mc .Close ()
48+ mc .close ()
4949 if data [3 ] > mc .sequence {
5050 return nil , ErrPktSyncMul
5151 }
@@ -59,7 +59,7 @@ func (mc *mysqlConn) readPacket() ([]byte, error) {
5959 // there was no previous packet
6060 if prevData == nil {
6161 mc .log (ErrMalformPkt )
62- mc .Close ()
62+ mc .close ()
6363 return nil , ErrInvalidConn
6464 }
6565
@@ -69,12 +69,11 @@ func (mc *mysqlConn) readPacket() ([]byte, error) {
6969 // read packet body [pktLen bytes]
7070 data , err = mc .buf .readNext (pktLen )
7171 if err != nil {
72+ mc .close ()
7273 if cerr := mc .canceled .Value (); cerr != nil {
7374 return nil , cerr
7475 }
75- mc .log (err )
76- mc .Close ()
77- return nil , ErrInvalidConn
76+ return nil , err
7877 }
7978
8079 // return data if this was the last packet
@@ -125,10 +124,10 @@ func (mc *mysqlConn) writePacket(data []byte) error {
125124
126125 n , err := mc .netConn .Write (data [:4 + size ])
127126 if err != nil {
127+ mc .cleanup ()
128128 if cerr := mc .canceled .Value (); cerr != nil {
129129 return cerr
130130 }
131- mc .cleanup ()
132131 if n == 0 && pktLen == len (data )- 4 {
133132 // only for the first loop iteration when nothing was written yet
134133 mc .log (err )
@@ -162,11 +161,6 @@ func (mc *mysqlConn) writePacket(data []byte) error {
162161func (mc * mysqlConn ) readHandshakePacket () (data []byte , plugin string , err error ) {
163162 data , err = mc .readPacket ()
164163 if err != nil {
165- // for init we can rewrite this to ErrBadConn for sql.Driver to retry, since
166- // in connection initialization we don't risk retrying non-idempotent actions.
167- if err == ErrInvalidConn {
168- return nil , "" , driver .ErrBadConn
169- }
170164 return
171165 }
172166
@@ -312,9 +306,8 @@ func (mc *mysqlConn) writeHandshakeResponsePacket(authResp []byte, plugin string
312306 // Calculate packet length and get buffer with that size
313307 data , err := mc .buf .takeBuffer (pktLen + 4 )
314308 if err != nil {
315- // cannot take the buffer. Something must be wrong with the connection
316- mc .log (err )
317- return errBadConnNoWrite
309+ mc .cleanup ()
310+ return err
318311 }
319312
320313 // ClientFlags [32 bit]
@@ -404,9 +397,8 @@ func (mc *mysqlConn) writeAuthSwitchPacket(authData []byte) error {
404397 pktLen := 4 + len (authData )
405398 data , err := mc .buf .takeBuffer (pktLen )
406399 if err != nil {
407- // cannot take the buffer. Something must be wrong with the connection
408- mc .log (err )
409- return errBadConnNoWrite
400+ mc .cleanup ()
401+ return err
410402 }
411403
412404 // Add the auth data [EOF]
@@ -424,9 +416,7 @@ func (mc *mysqlConn) writeCommandPacket(command byte) error {
424416
425417 data , err := mc .buf .takeSmallBuffer (4 + 1 )
426418 if err != nil {
427- // cannot take the buffer. Something must be wrong with the connection
428- mc .log (err )
429- return errBadConnNoWrite
419+ return err
430420 }
431421
432422 // Add command byte
@@ -443,9 +433,7 @@ func (mc *mysqlConn) writeCommandPacketStr(command byte, arg string) error {
443433 pktLen := 1 + len (arg )
444434 data , err := mc .buf .takeBuffer (pktLen + 4 )
445435 if err != nil {
446- // cannot take the buffer. Something must be wrong with the connection
447- mc .log (err )
448- return errBadConnNoWrite
436+ return err
449437 }
450438
451439 // Add command byte
@@ -464,9 +452,7 @@ func (mc *mysqlConn) writeCommandPacketUint32(command byte, arg uint32) error {
464452
465453 data , err := mc .buf .takeSmallBuffer (4 + 1 + 4 )
466454 if err != nil {
467- // cannot take the buffer. Something must be wrong with the connection
468- mc .log (err )
469- return errBadConnNoWrite
455+ return err
470456 }
471457
472458 // Add command byte
@@ -1007,9 +993,7 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error {
1007993 // In this case the len(data) == cap(data) which is used to optimise the flow below.
1008994 }
1009995 if err != nil {
1010- // cannot take the buffer. Something must be wrong with the connection
1011- mc .log (err )
1012- return errBadConnNoWrite
996+ return err
1013997 }
1014998
1015999 // command [1 byte]
@@ -1207,8 +1191,7 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error {
12071191 if valuesCap != cap (paramValues ) {
12081192 data = append (data [:pos ], paramValues ... )
12091193 if err = mc .buf .store (data ); err != nil {
1210- mc .log (err )
1211- return errBadConnNoWrite
1194+ return err
12121195 }
12131196 }
12141197
0 commit comments