From 58701cae111cf6cc2f6c0abc4fb60e4c07fbd272 Mon Sep 17 00:00:00 2001 From: Alexey Botchkov Date: Mon, 17 Nov 2008 20:06:03 +0400 Subject: [PATCH] Bug#34517 SHOW GLOBAL STATUS does not work properly in embedded server. GLOBAL STATUS is calculated by studying the list of threads. In the embedded server threads were not linked to the internal list, so the calculation always returns 0. Fixed by 'linking' the embedded-server threads to the same list per-file comments: libmysqld/lib_sql.cc Bug#34517 SHOW GLOBAL STATUS does not work properly in embedded server. Add newly created 'threads' to the internal thread list. Remove them from the list as they're freed. mysql-test/r/information_schema.result Bug#34517 SHOW GLOBAL STATUS does not work properly in embedded server. test result mysql-test/t/information_schema.test Bug#34517 SHOW GLOBAL STATUS does not work properly in embedded server. test case added --- libmysqld/lib_sql.cc | 2 ++ mysql-test/r/information_schema.result | 9 +++++++++ mysql-test/t/information_schema.test | 10 ++++++++++ 3 files changed, 21 insertions(+) diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index 6e82812239e..e78c656d565 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -384,6 +384,7 @@ static void emb_free_embedded_thd(MYSQL *mysql) thd->clear_data_list(); thread_count--; thd->store_globals(); + thd->unlink(); delete thd; mysql->thd=0; } @@ -627,6 +628,7 @@ void *create_embedded_thd(int client_flag) bzero((char*) &thd->net, sizeof(thd->net)); thread_count++; + threads.append(thd); return thd; err: delete(thd); diff --git a/mysql-test/r/information_schema.result b/mysql-test/r/information_schema.result index 0ed501252f6..85af461eb14 100644 --- a/mysql-test/r/information_schema.result +++ b/mysql-test/r/information_schema.result @@ -1698,4 +1698,13 @@ drop table if exists t1;drop table if exists Warnings: Warning 1265 Data truncated for column 'VARIABLE_VALUE' at row 1 set global init_connect=""; +create table t0 select * from information_schema.global_status where VARIABLE_NAME='COM_SELECT'; +SELECT 1; +1 +1 +select a.VARIABLE_VALUE - b.VARIABLE_VALUE from t0 b, information_schema.global_status a +where a.VARIABLE_NAME = b.VARIABLE_NAME; +a.VARIABLE_VALUE - b.VARIABLE_VALUE +2 +drop table t0; End of 5.1 tests. diff --git a/mysql-test/t/information_schema.test b/mysql-test/t/information_schema.test index 667a9279e84..bcb22c44076 100644 --- a/mysql-test/t/information_schema.test +++ b/mysql-test/t/information_schema.test @@ -1373,4 +1373,14 @@ drop table if exists t1;drop table if exists t1;"; select * from information_schema.global_variables where variable_name='init_connect'; set global init_connect=""; +# +# Bug #34517 SHOW GLOBAL STATUS does not work properly in embedded server. +# + +create table t0 select * from information_schema.global_status where VARIABLE_NAME='COM_SELECT'; +SELECT 1; +select a.VARIABLE_VALUE - b.VARIABLE_VALUE from t0 b, information_schema.global_status a + where a.VARIABLE_NAME = b.VARIABLE_NAME; +drop table t0; + --echo End of 5.1 tests.