@@ -117,39 +117,33 @@ func (mc *mysqlConn) writePacket(data []byte) error {
117117		// Write packet 
118118		if  mc .writeTimeout  >  0  {
119119			if  err  :=  mc .netConn .SetWriteDeadline (time .Now ().Add (mc .writeTimeout )); err  !=  nil  {
120- 				mc .cleanup ()
121120				mc .log (err )
121+ 				mc .cleanup ()
122122				return  err 
123123			}
124124		}
125125
126126		n , err  :=  mc .netConn .Write (data [:4 + size ])
127- 		if  err  ==  nil  &&  n  ==  4 + size  {
128- 			mc .sequence ++ 
129- 			if  size  !=  maxPacketSize  {
130- 				return  nil 
131- 			}
132- 			pktLen  -=  size 
133- 			data  =  data [size :]
134- 			continue 
135- 		}
136- 
137- 		// Handle error 
138- 		if  err  ==  nil  { // n != len(data) 
127+ 		if  err  !=  nil  {
139128			mc .cleanup ()
140- 			mc .log (ErrMalformPkt )
141- 		} else  {
142129			if  cerr  :=  mc .canceled .Value (); cerr  !=  nil  {
143130				return  cerr 
144131			}
145- 			if  n  ==  0  &&  pktLen  ==  len (data )- 4  {
146- 				// only for the first loop iteration when nothing was written yet 
147- 				return  errBadConnNoWrite 
148- 			}
132+ 			return  err 
133+ 		}
134+ 		if  n  !=  4 + size  {
135+ 			// io.Writer(b) must return a non-nil error if it cannot write len(b) bytes. 
136+ 			// The io.ErrShortWrite error is used to indicate that this rule has not been followed. 
149137			mc .cleanup ()
150- 			mc . log ( err ) 
138+ 			return   io . ErrShortWrite 
151139		}
152- 		return  ErrInvalidConn 
140+ 
141+ 		mc .sequence ++ 
142+ 		if  size  !=  maxPacketSize  {
143+ 			return  nil 
144+ 		}
145+ 		pktLen  -=  size 
146+ 		data  =  data [size :]
153147	}
154148}
155149
@@ -305,8 +299,8 @@ func (mc *mysqlConn) writeHandshakeResponsePacket(authResp []byte, plugin string
305299	data , err  :=  mc .buf .takeBuffer (pktLen  +  4 )
306300	if  err  !=  nil  {
307301		// cannot take the buffer. Something must be wrong with the connection 
308- 		mc .log ( err )
309- 		return  errBadConnNoWrite 
302+ 		mc .cleanup ( )
303+ 		return  err 
310304	}
311305
312306	// ClientFlags [32 bit] 
@@ -394,8 +388,8 @@ func (mc *mysqlConn) writeAuthSwitchPacket(authData []byte) error {
394388	data , err  :=  mc .buf .takeSmallBuffer (pktLen )
395389	if  err  !=  nil  {
396390		// cannot take the buffer. Something must be wrong with the connection 
397- 		mc .log ( err )
398- 		return  errBadConnNoWrite 
391+ 		mc .cleanup ( )
392+ 		return  err 
399393	}
400394
401395	// Add the auth data [EOF] 
@@ -414,8 +408,8 @@ func (mc *mysqlConn) writeCommandPacket(command byte) error {
414408	data , err  :=  mc .buf .takeSmallBuffer (4  +  1 )
415409	if  err  !=  nil  {
416410		// cannot take the buffer. Something must be wrong with the connection 
417- 		mc .log ( err )
418- 		return  errBadConnNoWrite 
411+ 		mc .cleanup ( )
412+ 		return  err 
419413	}
420414
421415	// Add command byte 
@@ -433,8 +427,8 @@ func (mc *mysqlConn) writeCommandPacketStr(command byte, arg string) error {
433427	data , err  :=  mc .buf .takeBuffer (pktLen  +  4 )
434428	if  err  !=  nil  {
435429		// cannot take the buffer. Something must be wrong with the connection 
436- 		mc .log ( err )
437- 		return  errBadConnNoWrite 
430+ 		mc .cleanup ( )
431+ 		return  err 
438432	}
439433
440434	// Add command byte 
@@ -454,8 +448,8 @@ func (mc *mysqlConn) writeCommandPacketUint32(command byte, arg uint32) error {
454448	data , err  :=  mc .buf .takeSmallBuffer (4  +  1  +  4 )
455449	if  err  !=  nil  {
456450		// cannot take the buffer. Something must be wrong with the connection 
457- 		mc .log ( err )
458- 		return  errBadConnNoWrite 
451+ 		mc .cleanup ( )
452+ 		return  err 
459453	}
460454
461455	// Add command byte 
@@ -997,8 +991,8 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error {
997991	}
998992	if  err  !=  nil  {
999993		// cannot take the buffer. Something must be wrong with the connection 
1000- 		mc .log ( err )
1001- 		return  errBadConnNoWrite 
994+ 		mc .cleanup ( )
995+ 		return  err 
1002996	}
1003997
1004998	// command [1 byte] 
@@ -1196,8 +1190,8 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error {
11961190		if  valuesCap  !=  cap (paramValues ) {
11971191			data  =  append (data [:pos ], paramValues ... )
11981192			if  err  =  mc .buf .store (data ); err  !=  nil  {
1199- 				mc .log ( err )
1200- 				return  errBadConnNoWrite 
1193+ 				mc .cleanup ( )
1194+ 				return  err 
12011195			}
12021196		}
12031197
0 commit comments