diff options
author | Davi Arnaut <Davi.Arnaut@Sun.COM> | 2009-02-24 10:49:18 +0100 |
---|---|---|
committer | Davi Arnaut <Davi.Arnaut@Sun.COM> | 2009-02-24 10:49:18 +0100 |
commit | e4f47653912244d2fcc9e8e7b1d0f4dd240f902e (patch) | |
tree | 43ee155a8a890841554f2f0aaf6bc027d48d57d9 /mysql-test/include | |
parent | 87fcb23d4b509f4b3b00f0e282b44f790a9cb2fd (diff) | |
parent | 11b20f27affcdaeb528feb2d08c920771bd875ef (diff) | |
download | mariadb-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.inc | 26 |
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; |