1
0
mirror of https://github.com/MariaDB/server.git synced 2025-06-12 01:53:02 +03:00

A fix and test case for Bug#7990 "mysql_stmt_close doesn't

reset mysql->net.last_error": the solution is to clear
MYSQL->net error before performing COM_CLOSE: if the call
succeeds, the connection is usable for other statements.
More comprehensive fix is to clear MYSQL->net for all
recoverable errors at the time they happen, it will be
implemented in 5.0 as it introduces incompatibility in behavior.


libmysql/libmysql.c:
  A simple fix for Bug#7990 "mysql_stmt_close doesn't reset 
  mysql->net.last_error"
tests/mysql_client_test.c:
  A test case for Bug#7990 " mysql_stmt_close doesn't reset 
  mysql->net.last_error"
This commit is contained in:
unknown
2005-02-10 17:41:54 +03:00
parent fca90750df
commit a26ce94f7a
2 changed files with 38 additions and 1 deletions

View File

@ -1788,6 +1788,18 @@ static my_bool my_realloc_str(NET *net, ulong length)
}
/* Clear possible error statee of struct NET */
static void net_clear_error(NET *net)
{
if (net->last_errno)
{
net->last_errno= 0;
net->last_error[0]= '\0';
strmov(net->sqlstate, not_error_sqlstate);
}
}
/*
Set statement error code, sqlstate, and error message
from given errcode and sqlstate.
@ -4512,6 +4524,11 @@ my_bool STDCALL mysql_stmt_close(MYSQL_STMT *stmt)
if (mysql->unbuffered_fetch_owner == &stmt->unbuffered_fetch_cancelled)
mysql->unbuffered_fetch_owner= 0;
/*
Clear NET error state: if the following commands come through
successfully, connection will still be usable for other commands.
*/
net_clear_error(&mysql->net);
if (mysql->status != MYSQL_STATUS_READY)
{
/*