summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <aelkin/elkin@dsl-hkigw8-feb1fb00-100.dhcp.inet.fi>2006-07-10 00:26:26 +0300
committerunknown <aelkin/elkin@dsl-hkigw8-feb1fb00-100.dhcp.inet.fi>2006-07-10 00:26:26 +0300
commit868fee4dde4d73c2cd999f8a2ffc915f040e9e0b (patch)
tree6aa2ccfafc94f16af833a9e7eb667c9d3a0ce641 /sql
parent5d506d6b6255589dd4c28958ee03be59c690f4cf (diff)
downloadmariadb-git-868fee4dde4d73c2cd999f8a2ffc915f040e9e0b.tar.gz
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. sql/sql_base.cc: no-binlog branch is fixed: scanning across temporary_tables must be careful to save next table since the current is being destroyed inside of close_temporary. binlog-is-open case is ok.
Diffstat (limited to 'sql')
-rw-r--r--sql/sql_base.cc8
1 files changed, 5 insertions, 3 deletions
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 98e4346eafc..0a9529d6067 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -496,11 +496,13 @@ void close_temporary_tables(THD *thd)
TABLE *table;
if (!thd->temporary_tables)
return;
-
+
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);
}
thd->temporary_tables= 0;
@@ -518,7 +520,7 @@ void close_temporary_tables(THD *thd)
String s_query= String(buf, sizeof(buf), system_charset_info);
bool found_user_tables= false;
LINT_INIT(next);
-
+
/*
insertion sort of temp tables by pseudo_thread_id to build ordered list
of sublists of equal pseudo_thread_id