summaryrefslogtreecommitdiff
path: root/sql/wsrep_thd.cc
diff options
context:
space:
mode:
authorMonty <monty@mariadb.org>2017-08-05 19:26:10 +0300
committerMonty <monty@mariadb.org>2017-08-07 03:48:58 +0300
commit74543698a76c02d1a81e17e5918ecbf6b795607b (patch)
tree5f814415c2d08f1c9ab0303d673cfe64a9a048d4 /sql/wsrep_thd.cc
parent008786aedb7cacf41a371937c6215c41638c1f96 (diff)
downloadmariadb-git-74543698a76c02d1a81e17e5918ecbf6b795607b.tar.gz
MDEV-13179 main.errors fails with wrong errno
The problem was that the introduction of max-thread-mem-used can cause an allocation error very early, even before mysql_parse() is called. As mysql_parse() calls thd->reset_for_next_command(), which called clear_error(), the error number was lost. Fixed by adding an option to have unique messages for each KILL signal and change max-thread-mem-used to use this new feature. This removes a lot of problems with the original approach, where one could get errors signaled silenty almost any time. ixed by moving clear_error() from reset_for_next_command() to do_command(), before any memory allocation for the thread. Related changes: - reset_for_next_command() now have an optional parameter if we should call clear_error() or not. By default it's called, but not anymore from dispatch_command() which was the original problem. - Added optional paramater to clear_error() to force calling of reset_diagnostics_area(). Before clear_error() only called reset_diagnostics_area() if there was no error, so we normally called reset_diagnostics_area() twice. - This change removed several duplicated calls to clear_error() when starting a query. - Reset max_mem_used on COM_QUIT, to protect against kill during quit. - Use fatal_error() instead of setting is_fatal_error (cleanup) - Set fatal_error if max_thead_mem_used is signaled. (Same logic we use for other places where we are out of resources)
Diffstat (limited to 'sql/wsrep_thd.cc')
-rw-r--r--sql/wsrep_thd.cc2
1 files changed, 1 insertions, 1 deletions
diff --git a/sql/wsrep_thd.cc b/sql/wsrep_thd.cc
index 53632f56167..7b73273b8a9 100644
--- a/sql/wsrep_thd.cc
+++ b/sql/wsrep_thd.cc
@@ -232,7 +232,7 @@ void wsrep_replay_transaction(THD *thd)
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
thd->reset_for_next_command();
- thd->killed= NOT_KILLED;
+ thd->reset_killed();
close_thread_tables(thd);
if (thd->locked_tables_mode && thd->lock)
{