summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/mysql.h2
-rw-r--r--libmysqld/embedded_priv.h1
-rw-r--r--libmysqld/lib_sql.cc21
-rw-r--r--sql-common/client.c7
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));
}