summaryrefslogtreecommitdiff
path: root/mysql-test/main/myisam_crash_before_flush_keys.test
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test/main/myisam_crash_before_flush_keys.test')
-rw-r--r--mysql-test/main/myisam_crash_before_flush_keys.test47
1 files changed, 47 insertions, 0 deletions
diff --git a/mysql-test/main/myisam_crash_before_flush_keys.test b/mysql-test/main/myisam_crash_before_flush_keys.test
new file mode 100644
index 00000000000..8df81f73ec0
--- /dev/null
+++ b/mysql-test/main/myisam_crash_before_flush_keys.test
@@ -0,0 +1,47 @@
+--echo #
+--echo # BUG#41330 - Myisam table open count set to zero before index blocks are written.
+--echo #
+--source include/not_embedded.inc
+--echo # Don't test this under valgrind, memory leaks will occur
+--source include/not_valgrind.inc
+
+--echo # Binary must be compiled with debug for crash to occur
+--source include/have_debug.inc
+
+call mtr.add_suppression("Got an error from thread_id=.*ha_myisam.cc:");
+call mtr.add_suppression("MySQL thread id .*, query id .* localhost.*root Checking table");
+flush tables;
+# Avoid CrashReporter popup on Mac
+--source include/not_crashrep.inc
+
+let $MYSQLD_DATADIR= `select @@datadir`;
+SET GLOBAL delay_key_write=ALL;
+CREATE TABLE t1(a INT,
+ b INT,
+ PRIMARY KEY(a , b),
+ KEY(b)) ENGINE=MyISAM DELAY_KEY_WRITE = 1;
+INSERT INTO t1 VALUES (1,2),(2,3),(3,4),(4,5),(5,6);
+
+--echo # Setup the mysqld to crash at certain point
+SET SESSION debug_dbug="d,crash_before_flush_keys";
+
+--echo # Write file to make mysql-test-run.pl expect crash
+--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
+
+--echo # Run the crashing query
+--error 2013
+FLUSH TABLE t1;
+
+--echo # Write file to make mysql-test-run.pl start the server
+--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
+
+--echo # Turn on reconnect
+--enable_reconnect
+
+--echo # Call script that will poll the server waiting for
+--echo # it to be back online again
+--source include/wait_until_connected_again.inc
+
+# Must report that the table wasn't closed properly
+CHECK TABLE t1;
+DROP TABLE t1;