From 31697d0b80353a1e086c0063c39db03454e137de Mon Sep 17 00:00:00 2001 From: Nirbhay Choubey Date: Fri, 2 Sep 2016 12:21:40 -0400 Subject: MDEV-10545: Server crashed in my_copy_fix_mb on querying I_S and P_S tables Once THDs have been added to the global "threads" list, they must modify query_string only after acquiring per- thread LOCK_thd_data mutex. --- sql/log_event.cc | 1 - sql/sql_acl.cc | 8 ++++---- sql/sql_parse.cc | 7 +++---- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/sql/log_event.cc b/sql/log_event.cc index afa58afc21d..de6528638f0 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -6022,7 +6022,6 @@ int Load_log_event::do_apply_event(NET* net, rpl_group_info *rgi, new_db.str= (char *) rpl_filter->get_rewrite_db(db, &new_db.length); thd->set_db(new_db.str, new_db.length); DBUG_ASSERT(thd->query() == 0); - thd->reset_query_inner(); // Should not be needed thd->is_slave_error= 0; clear_all_errors(thd, const_cast(rli)); diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 23302e1847e..48c57303805 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -2797,7 +2797,7 @@ bool change_password(THD *thd, LEX_USER *user) if (WSREP(thd) && !IF_WSREP(thd->wsrep_applier, 0)) { - thd->set_query_inner(buff, query_length, system_charset_info); + thd->set_query(buff, query_length, system_charset_info); WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, (char*)"user", NULL); } @@ -2858,7 +2858,7 @@ error: // this label is used in WSREP_TO_ISOLATION_BEGIN { WSREP_TO_ISOLATION_END; - thd->set_query_inner(query_save); + thd->set_query(query_save); thd->wsrep_exec_mode = LOCAL_STATE; } #endif /* WITH_WSREP */ @@ -2913,7 +2913,7 @@ int acl_set_default_role(THD *thd, const char *host, const char *user, if (WSREP(thd) && !IF_WSREP(thd->wsrep_applier, 0)) { - thd->set_query_inner(buff, query_length, system_charset_info); + thd->set_query(buff, query_length, system_charset_info); WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, (char*)"user", NULL); } @@ -3009,7 +3009,7 @@ error: // this label is used in WSREP_TO_ISOLATION_END { WSREP_TO_ISOLATION_END; - thd->set_query_inner(query_save); + thd->set_query(query_save); thd->wsrep_exec_mode = LOCAL_STATE; } #endif /* WITH_WSREP */ diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index c6d80e1ba97..a15f3da8e12 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -7298,10 +7298,9 @@ void mysql_parse(THD *thd, char *rawbuf, uint length, Note that we don't need LOCK_thread_count to modify query_length. */ if (found_semicolon && (ulong) (found_semicolon - thd->query())) - thd->set_query_inner(thd->query(), - (uint32) (found_semicolon - - thd->query() - 1), - thd->charset()); + thd->set_query(thd->query(), + (uint32) (found_semicolon - thd->query() - 1), + thd->charset()); /* Actually execute the query */ if (found_semicolon) { -- cgit v1.2.1