From a84fae27d9badef8cc89b1369a90cfef1dc3c715 Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich Date: Thu, 1 Oct 2015 11:35:18 +0400 Subject: MDEV-8836 - Server crashed in my_copy_8bit on querying I_S.PROCESSLIST Fixed race condition in code filling INFORMATION_SCHEMA.PROCESSLIST.INFO_BINARY. When loading query string/length of another connection one must have LOCK_thd_data locked. --- sql/sql_show.cc | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sql/sql_show.cc b/sql/sql_show.cc index f64c30b88f5..bcc799dce7e 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -2888,6 +2888,15 @@ int fill_schema_processlist(THD* thd, TABLE_LIST* tables, COND* cond) table->field[7]->set_notnull(); } + /* INFO_BINARY */ + if (tmp->query()) + { + table->field[15]->store(tmp->query(), + MY_MIN(PROCESS_LIST_INFO_WIDTH, + tmp->query_length()), &my_charset_bin); + table->field[15]->set_notnull(); + } + /* Progress report. We need to do this under a lock to ensure that all is from the same stage. @@ -2916,15 +2925,6 @@ int fill_schema_processlist(THD* thd, TABLE_LIST* tables, COND* cond) /* QUERY_ID */ table->field[14]->store(tmp->query_id, TRUE); - /* INFO_BINARY */ - if (tmp->query()) - { - table->field[15]->store(tmp->query(), - MY_MIN(PROCESS_LIST_INFO_WIDTH, - tmp->query_length()), &my_charset_bin); - table->field[15]->set_notnull(); - } - table->field[16]->store(tmp->os_thread_id); if (schema_table_store_record(thd, table)) -- cgit v1.2.1