Commit bcd854fe authored by Sergey Petrunya's avatar Sergey Petrunya

MDEV-5308 Crash when running with slow_query_log=1

- Make log_slow_statement() always call delete_explain_query().
parent 146c8a48
...@@ -39,3 +39,15 @@ SELECT 'Server still alive?' as 'Yes'; ...@@ -39,3 +39,15 @@ SELECT 'Server still alive?' as 'Yes';
Yes Yes
Server still alive? Server still alive?
DROP TABLE t1; DROP TABLE t1;
#
# MDEV-5308 Crash when running with slow_query_log=1
#
SET @save1= @@log_slow_rate_limit;
SET @save2= @@long_query_time;
SET log_slow_rate_limit=1000;
SET long_query_time=0.000001;
SELECT 1;
1
1
SET log_slow_rate_limit=@save1;
SET long_query_time=@save2;
...@@ -47,3 +47,17 @@ SET max_join_size = 10; ...@@ -47,3 +47,17 @@ SET max_join_size = 10;
SELECT 'Server still alive?' as 'Yes'; SELECT 'Server still alive?' as 'Yes';
DROP TABLE t1; DROP TABLE t1;
--echo #
--echo # MDEV-5308 Crash when running with slow_query_log=1
--echo #
SET @save1= @@log_slow_rate_limit;
SET @save2= @@long_query_time;
SET log_slow_rate_limit=1000;
SET long_query_time=0.000001;
SELECT 1;
SET log_slow_rate_limit=@save1;
SET long_query_time=@save2;
...@@ -1554,7 +1554,7 @@ void log_slow_statement(THD *thd) ...@@ -1554,7 +1554,7 @@ void log_slow_statement(THD *thd)
statement in a trigger or stored function statement in a trigger or stored function
*/ */
if (unlikely(thd->in_sub_stmt)) if (unlikely(thd->in_sub_stmt))
DBUG_VOID_RETURN; // Don't set time for sub stmt goto end; // Don't set time for sub stmt
/* Follow the slow log filter configuration. */ /* Follow the slow log filter configuration. */
...@@ -1562,8 +1562,7 @@ void log_slow_statement(THD *thd) ...@@ -1562,8 +1562,7 @@ void log_slow_statement(THD *thd)
(thd->variables.log_slow_filter (thd->variables.log_slow_filter
&& !(thd->variables.log_slow_filter & thd->query_plan_flags))) && !(thd->variables.log_slow_filter & thd->query_plan_flags)))
{ {
delete_explain_query(thd->lex); goto end;
DBUG_VOID_RETURN;
} }
if (((thd->server_status & SERVER_QUERY_WAS_SLOW) || if (((thd->server_status & SERVER_QUERY_WAS_SLOW) ||
...@@ -1580,7 +1579,7 @@ void log_slow_statement(THD *thd) ...@@ -1580,7 +1579,7 @@ void log_slow_statement(THD *thd)
*/ */
if (thd->variables.log_slow_rate_limit > 1 && if (thd->variables.log_slow_rate_limit > 1 &&
(global_query_id % thd->variables.log_slow_rate_limit) != 0) (global_query_id % thd->variables.log_slow_rate_limit) != 0)
DBUG_VOID_RETURN; goto end;
thd_proc_info(thd, "logging slow query"); thd_proc_info(thd, "logging slow query");
slow_log_print(thd, thd->query(), thd->query_length(), slow_log_print(thd, thd->query(), thd->query_length(),
...@@ -1588,6 +1587,7 @@ void log_slow_statement(THD *thd) ...@@ -1588,6 +1587,7 @@ void log_slow_statement(THD *thd)
thd_proc_info(thd, 0); thd_proc_info(thd, 0);
} }
end:
delete_explain_query(thd->lex); delete_explain_query(thd->lex);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
......
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