summaryrefslogtreecommitdiff
path: root/libmysql
diff options
context:
space:
mode:
authorunknown <venu@myvenu.com>2003-02-21 15:00:05 -0800
committerunknown <venu@myvenu.com>2003-02-21 15:00:05 -0800
commitc9a50805a16704273186ef0d632e7df1c0b4ed6b (patch)
treec85bfb2a747f9e3b9c82906e741cfbbf5d50d21f /libmysql
parentf14222f2523db13becf570185296ed7c08b9d1b2 (diff)
downloadmariadb-git-c9a50805a16704273186ef0d632e7df1c0b4ed6b.tar.gz
Fix for mysql_stmt_close(), so that the PHP layer can map it easily to know whether the 'stmt' is really freed, so that they can free their internal stmts
Diffstat (limited to 'libmysql')
-rw-r--r--libmysql/libmysql.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c
index fee2895253e..25da7d48ad7 100644
--- a/libmysql/libmysql.c
+++ b/libmysql/libmysql.c
@@ -5430,12 +5430,15 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)
static my_bool stmt_close(MYSQL_STMT *stmt, my_bool skip_list)
{
MYSQL *mysql;
- my_bool error= 0;
DBUG_ENTER("mysql_stmt_close");
DBUG_ASSERT(stmt != 0);
- mysql= stmt->mysql;
+ if (!(mysql= stmt->mysql))
+ {
+ my_free((gptr) stmt, MYF(MY_WME));
+ DBUG_RETURN(0);
+ }
if (mysql->status != MYSQL_STATUS_READY)
{
/* Clear the current execution status */
@@ -5454,18 +5457,20 @@ static my_bool stmt_close(MYSQL_STMT *stmt, my_bool skip_list)
{
char buff[4];
int4store(buff, stmt->stmt_id);
- error= simple_command(mysql, COM_CLOSE_STMT, buff, 4, 1);
- }
- if (!error)
- {
- mysql_free_result(stmt->result);
- free_root(&stmt->mem_root, MYF(0));
- if (!skip_list)
- mysql->stmts= list_delete(mysql->stmts, &stmt->list);
- mysql->status= MYSQL_STATUS_READY;
- my_free((gptr) stmt, MYF(MY_WME));
+ if (simple_command(mysql, COM_CLOSE_STMT, buff, 4, 1))
+ {
+ set_stmt_errmsg(stmt, mysql->net.last_error, mysql->net.last_errno);
+ stmt->mysql= NULL; /* connection isn't valid anymore */
+ DBUG_RETURN(1);
+ }
}
- DBUG_RETURN(error);
+ mysql_free_result(stmt->result);
+ free_root(&stmt->mem_root, MYF(0));
+ if (!skip_list)
+ mysql->stmts= list_delete(mysql->stmts, &stmt->list);
+ mysql->status= MYSQL_STATUS_READY;
+ my_free((gptr) stmt, MYF(MY_WME));
+ DBUG_RETURN(0);
}
my_bool STDCALL mysql_stmt_close(MYSQL_STMT *stmt)