[1mdiff --git a/connection.c b/connection.c[m
[1mindex af985f2..7f73296 100644[m
[1m--- a/connection.c[m
[1m+++ b/connection.c[m
[36m@@ -2808,6 +2808,7 @@[m [mCC_send_query_append(ConnectionClass *self, const char *query, QueryInfo *qi, UD[m
 	int			maxlen,[m
 				empty_reqs;[m
 	BOOL		ReadyToReturn = FALSE,[m
[32m+[m			[32mretDetermined = FALSE,[m
 				query_completed = FALSE,[m
 				beforeV2 = !(PROTOCOL_64(&self->connInfo) || PROTOCOL_74(&self->connInfo)),[m
 				aborted = FALSE,[m
[36m@@ -3246,6 +3247,7 @@[m [minolog("Discarded the first SAVEPOINT\n");[m
 						else[m
 							retres = cmdres;[m
 						aborted = TRUE;[m
[32m+[m						[32mretDetermined = TRUE;[m
 					}[m
 					query_completed = TRUE;[m
 				}[m
[36m@@ -3389,17 +3391,28 @@[m [mmylog("!!! copydata len=%d\n", response_length);[m
 [m
 cleanup:[m
 	if (SOCK_get_errcode(self->sock) != 0)[m
[31m-	{[m
[31m-		if (0 == CC_get_errornumber(self))[m
[31m-			CC_set_error(self, CONNECTION_COMMUNICATION_ERROR, "Communication error while sending query", func);[m
 		kill_conn = TRUE;[m
[31m-	}[m
 	if (kill_conn)[m
[31m-	{[m
 		CC_on_abort(self, CONN_DEAD);[m
[32m+[m
[32m+[m	[32mif (CONN_DOWN == self->status)[m
[32m+[m	[32m{[m
[32m+[m		[32mif (0 == CC_get_errornumber(self))[m
[32m+[m			[32mCC_set_error(self, CONNECTION_COMMUNICATION_ERROR, "Communication error while sending query", func);[m
 		retres = NULL;[m
[32m+[m		[32maborted = TRUE;[m
 	}[m
[31m-	if (rollback_on_error && CC_is_in_trans(self) && !discard_next_savepoint)[m
[32m+[m	[32m/*[m
[32m+[m	[32m * Break before being ready to return.[m
[32m+[m	[32m */[m
[32m+[m	[32melse if (!ReadyToReturn &&[m
[32m+[m		[32m !retDetermined)[m
[32m+[m		[32mretres = cmdres;[m
[32m+[m	[32m/* Issue rollback command if necessary */[m
[32m+[m	[32mif (CONN_CONNECTED == self->status &&[m
[32m+[m	[32m    rollback_on_error &&[m
[32m+[m	[32m    CC_is_in_trans(self) &&[m
[32m+[m	[32m    !discard_next_savepoint)[m
 	{[m
 		char	cmd[64];[m
 [m
[36m@@ -3421,12 +3434,6 @@[m [mcleanup:[m
 	CLEANUP_FUNC_CONN_CS(func_cs_count, self);[m
 #undef	return[m
 	/*[m
[31m-	 * Break before being ready to return.[m
[31m-	 */[m
[31m-	if (!ReadyToReturn)[m
[31m-		retres = cmdres;[m
[31m-[m
[31m-	/*[m
 	 * Cleanup garbage results before returning.[m
 	 */[m
 	if (cmdres && retres != cmdres && !used_passed_result_object)[m
[1mdiff --git a/statement.c b/statement.c[m
[1mindex da5abf5..98faadf 100644[m
[1m--- a/statement.c[m
[1m+++ b/statement.c[m
[36m@@ -2077,12 +2077,17 @@[m [minolog("get_Result=%p %p %d\n", res, SC_get_Result(self), self->curr_param_resul[m
 			 */[m
 			if (appendq)[m
 			{[m
[31m-				QResultClass	*qres, *nres;[m
[32m+[m				[32mQResultClass	*qres, *pres, *nres;[m
 [m
[31m-				for (qres = res; qres;)[m
[32m+[m				[32mfor (qres = res, pres = NULL; qres;)[m
 				{[m
 					if (qres->command && strnicmp(qres->command, fetch_cmd, 5) == 0)[m
 					{[m
[32m+[m						[32mif (NULL != pres)[m
[32m+[m						[32m{[m
[32m+[m							[32mpres->next = NULL;[m
[32m+[m							[32mQR_Destructor(res);[m
[32m+[m						[32m}[m
 						res = qres;[m
 						break;[m
 					}[m
[36m@@ -2096,8 +2101,7 @@[m [minolog("get_Result=%p %p %d\n", res, SC_get_Result(self), self->curr_param_resul[m
 						}[m
 						QR_add_notice(nres, QR_get_notice(qres));[m
 					}[m
[31m-					qres->next = NULL;[m
[31m-					QR_Destructor(qres);[m
[32m+[m					[32mpres = qres;[m
 					qres = nres;[m
 				}[m
 			}[m
