Commit 31697d0b authored by Nirbhay Choubey's avatar Nirbhay Choubey

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.
parent a322651b
...@@ -6022,7 +6022,6 @@ int Load_log_event::do_apply_event(NET* net, rpl_group_info *rgi, ...@@ -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); new_db.str= (char *) rpl_filter->get_rewrite_db(db, &new_db.length);
thd->set_db(new_db.str, new_db.length); thd->set_db(new_db.str, new_db.length);
DBUG_ASSERT(thd->query() == 0); DBUG_ASSERT(thd->query() == 0);
thd->reset_query_inner(); // Should not be needed
thd->is_slave_error= 0; thd->is_slave_error= 0;
clear_all_errors(thd, const_cast<Relay_log_info*>(rli)); clear_all_errors(thd, const_cast<Relay_log_info*>(rli));
......
...@@ -2797,7 +2797,7 @@ bool change_password(THD *thd, LEX_USER *user) ...@@ -2797,7 +2797,7 @@ bool change_password(THD *thd, LEX_USER *user)
if (WSREP(thd) && !IF_WSREP(thd->wsrep_applier, 0)) 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); WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, (char*)"user", NULL);
} }
...@@ -2858,7 +2858,7 @@ error: // this label is used in WSREP_TO_ISOLATION_BEGIN ...@@ -2858,7 +2858,7 @@ error: // this label is used in WSREP_TO_ISOLATION_BEGIN
{ {
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; thd->wsrep_exec_mode = LOCAL_STATE;
} }
#endif /* WITH_WSREP */ #endif /* WITH_WSREP */
...@@ -2913,7 +2913,7 @@ int acl_set_default_role(THD *thd, const char *host, const char *user, ...@@ -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)) 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); WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, (char*)"user", NULL);
} }
...@@ -3009,7 +3009,7 @@ error: // this label is used in WSREP_TO_ISOLATION_END ...@@ -3009,7 +3009,7 @@ error: // this label is used in WSREP_TO_ISOLATION_END
{ {
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; thd->wsrep_exec_mode = LOCAL_STATE;
} }
#endif /* WITH_WSREP */ #endif /* WITH_WSREP */
......
...@@ -7298,10 +7298,9 @@ void mysql_parse(THD *thd, char *rawbuf, uint length, ...@@ -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. Note that we don't need LOCK_thread_count to modify query_length.
*/ */
if (found_semicolon && (ulong) (found_semicolon - thd->query())) if (found_semicolon && (ulong) (found_semicolon - thd->query()))
thd->set_query_inner(thd->query(), thd->set_query(thd->query(),
(uint32) (found_semicolon - (uint32) (found_semicolon - thd->query() - 1),
thd->query() - 1), thd->charset());
thd->charset());
/* Actually execute the query */ /* Actually execute the query */
if (found_semicolon) if (found_semicolon)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment