diff options
author | unknown <venu@myvenu.com> | 2003-01-31 15:20:03 -0800 |
---|---|---|
committer | unknown <venu@myvenu.com> | 2003-01-31 15:20:03 -0800 |
commit | b58dd39b9923cfe0bb30cdc3d1c533ea1976c278 (patch) | |
tree | 21ebf7cfb3e79c1294c13f21efc10b790ab0e44a /libmysql | |
parent | 28f3c41f498a72c67c44c02c5bc7899b89a7ecb4 (diff) | |
download | mariadb-git-b58dd39b9923cfe0bb30cdc3d1c533ea1976c278.tar.gz |
Force to read all unread packets on stmt_close
tests/client_test.c:
tests for un cleared packets
Diffstat (limited to 'libmysql')
-rw-r--r-- | libmysql/libmysql.c | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 28a35da4f72..932bc276814 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -5340,22 +5340,42 @@ 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->status != MYSQL_STATUS_READY) + { + /* Clear the current execution status */ + DBUG_PRINT("warning",("Not all packets read, clearing them")); + for (;;) + { + ulong pkt_len; + if ((pkt_len= net_safe_read(mysql)) == packet_error) + break; + if (pkt_len <= 8 && mysql->net.read_pos[0] == 254) + break; + } + mysql->status= MYSQL_STATUS_READY; + } if (stmt->state == MY_ST_PREPARE || stmt->state == MY_ST_EXECUTE) { char buff[4]; int4store(buff, stmt->stmt_id); - error= simple_command(stmt->mysql, COM_CLOSE_STMT, buff, 4, 1); + 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)); } - mysql_free_result(stmt->result); - free_root(&stmt->mem_root, MYF(0)); - if (!skip_list) - stmt->mysql->stmts= list_delete(stmt->mysql->stmts, &stmt->list); - stmt->mysql->status= MYSQL_STATUS_READY; - my_free((gptr) stmt, MYF(MY_WME)); DBUG_RETURN(error); } |