BUG#20919 temp tables closing fails when binlog is off

closing temp tables through end_thread
had a flaw in binlog-off branch of close_temporary_tables where
next table to close was reset via table->next
 for (table= thd->temporary_tables; table; table= table->next)
which was wrong since the current table instance got destoyed at
	close_temporary(table, 1);

The fix adapts binlog-on branch method to engage the loop's internal 'next' variable which holds table->next prior table's destoying.
parent 87460ec7
...@@ -496,11 +496,13 @@ void close_temporary_tables(THD *thd) ...@@ -496,11 +496,13 @@ void close_temporary_tables(THD *thd)
TABLE *table; TABLE *table;
if (!thd->temporary_tables) if (!thd->temporary_tables)
return; return;
if (!mysql_bin_log.is_open()) if (!mysql_bin_log.is_open())
{ {
for (table= thd->temporary_tables; table; table= table->next) TABLE *next;
for (table= thd->temporary_tables; table; table= next)
{ {
next= table->next;
close_temporary(table, 1); close_temporary(table, 1);
} }
thd->temporary_tables= 0; thd->temporary_tables= 0;
...@@ -518,7 +520,7 @@ void close_temporary_tables(THD *thd) ...@@ -518,7 +520,7 @@ void close_temporary_tables(THD *thd)
String s_query= String(buf, sizeof(buf), system_charset_info); String s_query= String(buf, sizeof(buf), system_charset_info);
bool found_user_tables= false; bool found_user_tables= false;
LINT_INIT(next); LINT_INIT(next);
/* /*
insertion sort of temp tables by pseudo_thread_id to build ordered list insertion sort of temp tables by pseudo_thread_id to build ordered list
of sublists of equal pseudo_thread_id of sublists of equal pseudo_thread_id
......
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