From 2c44def1eeaaebf365626619a9733a4e90faa801 Mon Sep 17 00:00:00 2001 From: "tsmith@ramayana.hindu.god" <> Date: Mon, 27 Aug 2007 14:31:27 -0600 Subject: [PATCH] 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 | 11 +++++++++++ mysql-test/r/func_misc.result | 4 ++++ mysql-test/t/func_misc.test | 8 ++++++++ sql/mysqld.cc | 5 +++++ sql/sql_connect.cc | 5 +++++ 5 files changed, 33 insertions(+) diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index 42d2752f6e1..9c26febe627 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -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; diff --git a/mysql-test/r/func_misc.result b/mysql-test/r/func_misc.result index 447d5620a4d..39bf1470afe 100644 --- a/mysql-test/r/func_misc.result +++ b/mysql-test/r/func_misc.result @@ -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 diff --git a/mysql-test/t/func_misc.test b/mysql-test/t/func_misc.test index a48f619dc34..01eff55d1f6 100644 --- a/mysql-test/t/func_misc.test +++ b/mysql-test/t/func_misc.test @@ -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 diff --git a/sql/mysqld.cc b/sql/mysqld.cc index d5336f5dd9c..b4ea09597a8 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -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 */ diff --git a/sql/sql_connect.cc b/sql/sql_connect.cc index 03b9908c1ad..6bb0f62d843 100644 --- a/sql/sql_connect.cc +++ b/sql/sql_connect.cc @@ -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;