• Monty's avatar
    MDEV-13179 main.errors fails with wrong errno · 74543698
    Monty authored
    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)
    74543698
log_event.cc 413 KB