Commit 6d45d27c authored by Mikael Ronström's avatar Mikael Ronström

Simplify interface to connect methods in server

parent e3f89e5d
...@@ -34,7 +34,6 @@ ...@@ -34,7 +34,6 @@
*/ */
#define MYSQL_SERVER 1 #define MYSQL_SERVER 1
#include <sql_class.h> #include <sql_class.h>
#include <probes_mysql.h>
#include <scheduler.h> #include <scheduler.h>
#include <debug_sync.h> #include <debug_sync.h>
#include <sql_profile.h> #include <sql_profile.h>
...@@ -55,9 +54,10 @@ bool do_command(THD *thd); ...@@ -55,9 +54,10 @@ bool do_command(THD *thd);
ensure that the proper MySQL Server logic attached to these events is ensure that the proper MySQL Server logic attached to these events is
executed. executed.
*/ */
bool login_connection(THD *thd); bool thd_prepare_connection(THD *thd);
void prepare_new_connection_state(THD* thd); bool thd_is_connection_alive(THD *thd);
void end_connection(THD *thd); void end_connection(THD *thd);
void mysql_audit_release(THD *thd);
bool setup_connection_thread_globals(THD *thd); bool setup_connection_thread_globals(THD *thd);
bool init_new_connection_handler_thread(); bool init_new_connection_handler_thread();
......
...@@ -685,6 +685,32 @@ pthread_handler_t handle_one_connection(void *arg) ...@@ -685,6 +685,32 @@ pthread_handler_t handle_one_connection(void *arg)
return 0; return 0;
} }
bool thd_prepare_connection(THD *thd)
{
bool rc;
lex_start(thd);
rc= login_connection(thd);
MYSQL_AUDIT_NOTIFY_CONNECTION_CONNECT(thd);
if (rc)
return rc;
MYSQL_CONNECTION_START(thd->thread_id, &thd->security_ctx->priv_user[0],
(char *) thd->security_ctx->host_or_ip);
prepare_new_connection_state(thd);
return FALSE;
}
bool thd_is_connection_alive(THD *thd)
{
NET *net= &thd->net;
if (!net->error &&
net->vio != 0 &&
!(thd->killed == THD::KILL_CONNECTION))
return TRUE;
return FALSE;
}
void do_handle_one_connection(THD *thd_arg) void do_handle_one_connection(THD *thd_arg)
{ {
THD *thd= thd_arg; THD *thd= thd_arg;
...@@ -727,22 +753,13 @@ void do_handle_one_connection(THD *thd_arg) ...@@ -727,22 +753,13 @@ void do_handle_one_connection(THD *thd_arg)
for (;;) for (;;)
{ {
NET *net= &thd->net;
bool rc; bool rc;
lex_start(thd); rc= thd_prepare_connection(thd);
rc= login_connection(thd);
MYSQL_AUDIT_NOTIFY_CONNECTION_CONNECT(thd);
if (rc) if (rc)
goto end_thread; goto end_thread;
MYSQL_CONNECTION_START(thd->thread_id, &thd->security_ctx->priv_user[0], while (thd_is_connection_alive(thd))
(char *) thd->security_ctx->host_or_ip);
prepare_new_connection_state(thd);
while (!net->error && net->vio != 0 &&
!(thd->killed == THD::KILL_CONNECTION))
{ {
mysql_audit_release(thd); mysql_audit_release(thd);
if (do_command(thd)) if (do_command(thd))
......
...@@ -35,6 +35,8 @@ void time_out_user_resource_limits(THD *thd, USER_CONN *uc); ...@@ -35,6 +35,8 @@ void time_out_user_resource_limits(THD *thd, USER_CONN *uc);
void decrease_user_connections(USER_CONN *uc); void decrease_user_connections(USER_CONN *uc);
void thd_init_client_charset(THD *thd, uint cs_number); void thd_init_client_charset(THD *thd, uint cs_number);
bool setup_connection_thread_globals(THD *thd); bool setup_connection_thread_globals(THD *thd);
bool thd_prepare_connection(THD *thd);
bool thd_is_connection_alive(THD *thd);
int check_user(THD *thd, enum enum_server_command command, int check_user(THD *thd, enum enum_server_command command,
const char *passwd, uint passwd_len, const char *db, const char *passwd, uint passwd_len, const char *db,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment