diff options
author | Monty <monty@mariadb.org> | 2017-08-05 19:26:10 +0300 |
---|---|---|
committer | Monty <monty@mariadb.org> | 2017-08-07 03:48:58 +0300 |
commit | 74543698a76c02d1a81e17e5918ecbf6b795607b (patch) | |
tree | 5f814415c2d08f1c9ab0303d673cfe64a9a048d4 /sql/debug_sync.cc | |
parent | 008786aedb7cacf41a371937c6215c41638c1f96 (diff) | |
download | mariadb-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/debug_sync.cc')
-rw-r--r-- | sql/debug_sync.cc | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/sql/debug_sync.cc b/sql/debug_sync.cc index 8b3412eb732..f6291ca7acc 100644 --- a/sql/debug_sync.cc +++ b/sql/debug_sync.cc @@ -1502,7 +1502,7 @@ static void debug_sync_execute(THD *thd, st_debug_sync_action *action) { if (!--action->hit_limit) { - thd->killed= KILL_QUERY; + thd->set_killed(KILL_QUERY); my_error(ER_DEBUG_SYNC_HIT_LIMIT, MYF(0)); } DBUG_PRINT("debug_sync_exec", ("hit_limit: %lu at: '%s'", |