diff options
-rw-r--r-- | include/mysql.h | 2 | ||||
-rw-r--r-- | libmysqld/embedded_priv.h | 1 | ||||
-rw-r--r-- | libmysqld/lib_sql.cc | 21 | ||||
-rw-r--r-- | sql-common/client.c | 7 |
4 files changed, 17 insertions, 14 deletions
diff --git a/include/mysql.h b/include/mysql.h index 963c35e92ea..95f480b41c1 100644 --- a/include/mysql.h +++ b/include/mysql.h @@ -564,8 +564,8 @@ typedef struct st_mysql_methods int (STDCALL *stmt_execute)(MYSQL_STMT *stmt); MYSQL_DATA *(STDCALL *read_binary_rows)(MYSQL_STMT *stmt); int (STDCALL *unbuffered_fetch)(MYSQL *mysql, char **row); + void (STDCALL *free_embedded_thd)(MYSQL *mysql); #endif - } MYSQL_METHODS; MYSQL_STMT * STDCALL mysql_prepare(MYSQL * mysql, const char *query, diff --git a/libmysqld/embedded_priv.h b/libmysqld/embedded_priv.h index 75461bbfbe0..833cc1b1f80 100644 --- a/libmysqld/embedded_priv.h +++ b/libmysqld/embedded_priv.h @@ -26,7 +26,6 @@ C_MODE_START extern void lib_connection_phase(NET *net, int phase); extern void init_embedded_mysql(MYSQL *mysql, int client_flag, char *db); extern void *create_embedded_thd(int client_flag, char *db); -extern void free_embedded_thd(MYSQL *mysql); extern MYSQL_METHODS embedded_methods; void free_old_query(MYSQL *mysql); extern my_bool server_inited; diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index 38fc3cce9ee..36b03279707 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -210,6 +210,14 @@ int STDCALL emb_unbuffered_fetch(MYSQL *mysql, char **row) return 0; } +static void STDCALL emb_free_embedded_thd(MYSQL *mysql) +{ + THD *thd= (THD*)mysql->thd; + if (thd->data) + free_rows(thd->data); + delete thd; +} + MYSQL_METHODS embedded_methods= { emb_mysql_read_query_result, @@ -221,7 +229,8 @@ MYSQL_METHODS embedded_methods= emb_read_prepare_result, emb_stmt_execute, emb_read_binary_rows, - emb_unbuffered_fetch + emb_unbuffered_fetch, + emb_free_embedded_thd }; C_MODE_END @@ -493,16 +502,6 @@ err: } #endif -void free_embedded_thd(MYSQL *mysql) -{ - THD *thd= (THD*)mysql->thd; - if (!thd) - return; - if (thd->data) - free_rows(thd->data); - delete thd; -} - C_MODE_END bool Protocol::send_fields(List<Item> *list, uint flag) diff --git a/sql-common/client.c b/sql-common/client.c index 6b3a44cf7d5..77aa733fe0c 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -1409,7 +1409,8 @@ static MYSQL_METHODS client_methods= cli_read_prepare_result, cli_stmt_execute, cli_read_binary_rows, - cli_unbuffered_fetch + cli_unbuffered_fetch, + NULL #endif }; @@ -2207,6 +2208,10 @@ void STDCALL mysql_close(MYSQL *mysql) #endif if (mysql != mysql->master) mysql_close(mysql->master); +#ifndef MYSQL_SERVER + if (mysql->thd) + (*mysql->methods->free_embedded_thd)(mysql); +#endif if (mysql->free_me) my_free((gptr) mysql,MYF(0)); } |