summaryrefslogtreecommitdiff
path: root/mysql-test/include
diff options
context:
space:
mode:
authorDavi Arnaut <Davi.Arnaut@Sun.COM>2009-02-24 10:49:18 +0100
committerDavi Arnaut <Davi.Arnaut@Sun.COM>2009-02-24 10:49:18 +0100
commite4f47653912244d2fcc9e8e7b1d0f4dd240f902e (patch)
tree43ee155a8a890841554f2f0aaf6bc027d48d57d9 /mysql-test/include
parent87fcb23d4b509f4b3b00f0e282b44f790a9cb2fd (diff)
parent11b20f27affcdaeb528feb2d08c920771bd875ef (diff)
downloadmariadb-git-e4f47653912244d2fcc9e8e7b1d0f4dd240f902e.tar.gz
Bug#41110: crash with handler command when used concurrently with alter table
Bug#41112: crash in mysql_ha_close_table/get_lock_data with alter table The problem is that the server wasn't handling robustly failures to re-open a table during a HANDLER .. READ statement. If the table needed to be re-opened due to it's storage engine being altered to one that doesn't support HANDLER, a reference (dangling pointer) to a closed table could be left in place and accessed in later attempts to fetch from the table using the handler. Also, if the server failed to set a error message if the re-open failed. These problems could lead to server crashes or hangs. The solution is to remove any references to a closed table and to set a error if reopening a table during a HANDLER .. READ statement fails. mysql-test/include/handler.inc: Add test case for Bug#41110 and Bug#41112 mysql-test/r/handler_innodb.result: Add test case result for Bug#41110 and Bug#41112 mysql-test/r/handler_myisam.result: Add test case result for Bug#41110 and Bug#41112 sql/sql_handler.cc: Remove redundant reopen check. Set errors even if reopening table. Reset TABLE_LIST::table reference when the table is closed.
Diffstat (limited to 'mysql-test/include')
-rw-r--r--mysql-test/include/handler.inc26
1 files changed, 26 insertions, 0 deletions
diff --git a/mysql-test/include/handler.inc b/mysql-test/include/handler.inc
index 485b2e881d3..04f4cac831d 100644
--- a/mysql-test/include/handler.inc
+++ b/mysql-test/include/handler.inc
@@ -692,3 +692,29 @@ unlock tables;
drop table t1;
--error ER_UNKNOWN_TABLE
handler t1 read a next;
+
+#
+# Bug#41110: crash with handler command when used concurrently with alter table
+# Bug#41112: crash in mysql_ha_close_table/get_lock_data with alter table
+#
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+create table t1 (a int);
+insert into t1 values (1);
+handler t1 open;
+connect(con1,localhost,root,,);
+send alter table t1 engine=memory;
+connection default;
+let $wait_condition=
+ select count(*) = 1 from information_schema.processlist
+ where state = "rename result table" and info = "alter table t1 engine=memory";
+--source include/wait_condition.inc
+--error ER_ILLEGAL_HA
+handler t1 read a next;
+handler t1 close;
+connection con1;
+--reap
+drop table t1;
+connection default;