Bug #30389: connection_id() always return 0 in embedded server
Initialize thd->variables.pseudo_thread_id when a new embedded thd is created. libmysqld/lib_sql.cc: Add comment regarding duplication of code in create_embedded_thd() vs. create_new_thread() and prepare_new_connection_state(). This was a cause for not properly initializing the pseudo_thread_id variable. mysql-test/r/func_misc.result: Add test case to ensure connection_id() returns a sane value mysql-test/t/func_misc.test: Add test case to ensure connection_id() returns a sane value sql/mysqld.cc: Add comment warning of the duplication of code between create_new_thread() and create_embedded_thd() sql/sql_connect.cc: Add comment warning of the duplication of code between prepare_new_connection_state() and create_embedded_thd()
This commit is contained in:
parent
ad4ee20673
commit
61e988e712
@ -564,6 +564,17 @@ void init_embedded_mysql(MYSQL *mysql, int client_flag)
|
||||
init_alloc_root(&mysql->field_alloc, 8192, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
@brief Initialize a new THD for a connection in the embedded server
|
||||
|
||||
@param client_flag Client capabilities which this thread supports
|
||||
@return pointer to the created THD object
|
||||
|
||||
@todo
|
||||
This function copies code from several places in the server, including
|
||||
create_new_thread(), and prepare_new_connection_state(). This should
|
||||
be refactored to avoid code duplication.
|
||||
*/
|
||||
void *create_embedded_thd(int client_flag)
|
||||
{
|
||||
THD * thd= new THD;
|
||||
|
@ -191,3 +191,7 @@ drop table table_26093;
|
||||
drop function func_26093_a;
|
||||
drop function func_26093_b;
|
||||
End of 5.0 tests
|
||||
select connection_id() > 0;
|
||||
connection_id() > 0
|
||||
1
|
||||
End of tests
|
||||
|
@ -199,3 +199,11 @@ drop function func_26093_a;
|
||||
drop function func_26093_b;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
#
|
||||
# Bug #30389: connection_id() always return 0 in embedded server
|
||||
#
|
||||
|
||||
select connection_id() > 0;
|
||||
|
||||
--echo End of tests
|
||||
|
@ -4355,6 +4355,11 @@ static void create_new_thread(THD *thd)
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
pthread_mutex_lock(&LOCK_thread_count);
|
||||
/*
|
||||
The initialization of thread_id is done in create_embedded_thd() for
|
||||
the embedded library.
|
||||
TODO: refactor this to avoid code duplication there
|
||||
*/
|
||||
thd->thread_id= thd->variables.pseudo_thread_id= thread_id++;
|
||||
|
||||
/* Start a new thread to handle connection */
|
||||
|
@ -1008,6 +1008,11 @@ void prepare_new_connection_state(THD* thd)
|
||||
if (thd->client_capabilities & CLIENT_COMPRESS)
|
||||
thd->net.compress=1; // Use compression
|
||||
|
||||
/*
|
||||
Much of this is duplicated in create_embedded_thd() for the
|
||||
embedded server library.
|
||||
TODO: refactor this to avoid code duplication there
|
||||
*/
|
||||
thd->version= refresh_version;
|
||||
thd->proc_info= 0;
|
||||
thd->command= COM_SLEEP;
|
||||
|
Loading…
x
Reference in New Issue
Block a user