diff options
author | Monty <monty@mariadb.org> | 2015-06-26 14:48:22 +0300 |
---|---|---|
committer | Monty <monty@mariadb.org> | 2015-06-26 14:48:22 +0300 |
commit | bc300464f1674dc774fd166a87d8894cbe498563 (patch) | |
tree | 8c937ad0ad3001175e884c37a806e2ca6ebcfbca | |
parent | 67c56ab1e4841058c40e6b61e1dcbb6e21d4ce52 (diff) | |
download | mariadb-git-bc300464f1674dc774fd166a87d8894cbe498563.tar.gz |
Fix for MDEV-8301; Statistics for a thread could be counted twice in SHOW STATUS while thread was ending
Fixed by adding a marker if we have added the thread statistics to the global counters.
-rw-r--r-- | sql/sql_class.cc | 2 | ||||
-rw-r--r-- | sql/sql_class.h | 11 | ||||
-rw-r--r-- | sql/sql_show.cc | 5 |
3 files changed, 14 insertions, 4 deletions
diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 76b2031f553..a4a4b370658 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -1263,6 +1263,7 @@ void THD::init(void) bzero((char *) &status_var, sizeof(status_var)); bzero((char *) &org_status_var, sizeof(org_status_var)); start_bytes_received= 0; + status_in_global= 0; if (variables.sql_log_bin) variables.option_bits|= OPTION_BIN_LOG; @@ -1366,6 +1367,7 @@ void THD::change_user(void) cleanup(); reset_killed(); cleanup_done= 0; + status_in_global= 0; init(); stmt_map.reset(); my_hash_init(&user_vars, system_charset_info, USER_VARS_HASH_SIZE, 0, 0, diff --git a/sql/sql_class.h b/sql/sql_class.h index 67db1662f10..17dd0f9f64f 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -1733,11 +1733,11 @@ public: /* Do not set socket timeouts for wait_timeout (used with threadpool) */ bool skip_wait_timeout; - /* container for handler's private per-connection data */ - Ha_data ha_data[MAX_HA]; - bool prepare_derived_at_open; + /* Set to 1 if status of this THD is already in global status */ + bool status_in_global; + /* To signal that the tmp table to be created is created for materialized derived table or a view. @@ -1746,6 +1746,9 @@ public: bool save_prep_leaf_list; + /* container for handler's private per-connection data */ + Ha_data ha_data[MAX_HA]; + #ifndef MYSQL_CLIENT binlog_cache_mngr * binlog_setup_trx_data(); @@ -3116,6 +3119,8 @@ public: { mysql_mutex_lock(&LOCK_status); add_to_status(&global_status_var, &status_var); + /* Mark that this THD status has already been added in global status */ + status_in_global= 1; mysql_mutex_unlock(&LOCK_status); } diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 22484748523..1e27e654318 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -3109,7 +3109,10 @@ void calc_sum_of_all_status(STATUS_VAR *to) /* Add to this status from existing threads */ while ((tmp= it++)) - add_to_status(to, &tmp->status_var); + { + if (!tmp->status_in_global) + add_to_status(to, &tmp->status_var); + } mysql_mutex_unlock(&LOCK_thread_count); DBUG_VOID_RETURN; |