diff options
author | unknown <venu@myvenu.com> | 2003-02-21 15:00:05 -0800 |
---|---|---|
committer | unknown <venu@myvenu.com> | 2003-02-21 15:00:05 -0800 |
commit | c9a50805a16704273186ef0d632e7df1c0b4ed6b (patch) | |
tree | c85bfb2a747f9e3b9c82906e741cfbbf5d50d21f /libmysql | |
parent | f14222f2523db13becf570185296ed7c08b9d1b2 (diff) | |
download | mariadb-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.c | 31 |
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) |