summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMattias Jonsson <mattias.jonsson@oracle.com>2011-12-14 14:05:22 +0100
committerMattias Jonsson <mattias.jonsson@oracle.com>2011-12-14 14:05:22 +0100
commitaf187dee70762cba1c14f4a1c35dc8a72dd0c509 (patch)
tree25836ca2da6a0395cabb2f5786cfc45e58cf6618
parentea2cd838be2574d4609380b8f6acf2a600ac77af (diff)
parentba8c33f5ecc6e9465f0ac86858a0827028d37324 (diff)
downloadmariadb-git-af187dee70762cba1c14f4a1c35dc8a72dd0c509.tar.gz
merge
-rw-r--r--.bzrignore9
-rw-r--r--myisam/mi_preload.c3
-rw-r--r--mysql-test/r/key_cache.result16
-rw-r--r--mysql-test/t/key_cache.test16
-rw-r--r--sql/sql_table.cc5
5 files changed, 49 insertions, 0 deletions
diff --git a/.bzrignore b/.bzrignore
index 2b5b42cb87f..184ed9fe235 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -8,6 +8,7 @@
*.core
*.d
*.da
+*.dir
*.exe
*.gcda
*.gcno
@@ -25,6 +26,7 @@
*.pdb
*.reject
*.res
+*.rule
*.sbr
*.so
*.so.*
@@ -32,13 +34,19 @@
*.user
*.vcproj
*.vcproj.cmake
+*.vcxproj
+*.vcxproj.filters
*/*.dir/*
+Debug
+MySql.sdf
+Win32
*/*_pure_*warnings
*/.deps
*/.libs/*
*/.pure
*/debug/*
*/release/*
+RelWithDebInfo
*~
.*.swp
./CMakeCache.txt
@@ -83,6 +91,7 @@ BitKeeper/tmp/*
BitKeeper/tmp/bkr3sAHD
BitKeeper/tmp/gone
CMakeFiles/*
+CMakeFiles
COPYING
COPYING.LIB
Docs/#manual.texi#
diff --git a/myisam/mi_preload.c b/myisam/mi_preload.c
index c73c70962ed..f53fcd2e1ee 100644
--- a/myisam/mi_preload.c
+++ b/myisam/mi_preload.c
@@ -54,6 +54,9 @@ int mi_preload(MI_INFO *info, ulonglong key_map, my_bool ignore_leaves)
if (!keys || !mi_is_any_key_active(key_map) || key_file_length == pos)
DBUG_RETURN(0);
+ /* Preload into a non initialized key cache should never happen. */
+ DBUG_ASSERT(share->key_cache->key_cache_inited);
+
block_length= keyinfo[0].block_length;
if (ignore_leaves)
diff --git a/mysql-test/r/key_cache.result b/mysql-test/r/key_cache.result
index 9ada5dc0784..6513c4eb374 100644
--- a/mysql-test/r/key_cache.result
+++ b/mysql-test/r/key_cache.result
@@ -368,3 +368,19 @@ Variable_name Value
key_cache_block_size 1536
SET GLOBAL key_cache_block_size= @bug28478_key_cache_block_size;
DROP TABLE t1;
+#
+# Bug#12361113: crash when load index into cache
+#
+# Note that this creates an empty disabled key cache!
+SET GLOBAL key_cache_none.key_cache_block_size = 1024;
+CREATE TABLE t1 (a INT, b INTEGER NOT NULL, KEY (b) ) ENGINE = MYISAM;
+INSERT INTO t1 VALUES (1, 1);
+CACHE INDEX t1 in key_cache_none;
+ERROR HY000: Unknown key cache 'key_cache_none'
+# The bug crashed the server at LOAD INDEX below. Now it will succeed
+# since the default cache is used due to CACHE INDEX failed for
+# key_cache_none.
+LOAD INDEX INTO CACHE t1;
+Table Op Msg_type Msg_text
+test.t1 preload_keys status OK
+DROP TABLE t1;
diff --git a/mysql-test/t/key_cache.test b/mysql-test/t/key_cache.test
index 4c14dc96aaa..9d865b9b5fe 100644
--- a/mysql-test/t/key_cache.test
+++ b/mysql-test/t/key_cache.test
@@ -247,3 +247,19 @@ SET GLOBAL key_cache_block_size= @bug28478_key_cache_block_size;
DROP TABLE t1;
# End of 4.1 tests
+
+--echo #
+--echo # Bug#12361113: crash when load index into cache
+--echo #
+
+--echo # Note that this creates an empty disabled key cache!
+SET GLOBAL key_cache_none.key_cache_block_size = 1024;
+CREATE TABLE t1 (a INT, b INTEGER NOT NULL, KEY (b) ) ENGINE = MYISAM;
+INSERT INTO t1 VALUES (1, 1);
+--error ER_UNKNOWN_KEY_CACHE
+CACHE INDEX t1 in key_cache_none;
+--echo # The bug crashed the server at LOAD INDEX below. Now it will succeed
+--echo # since the default cache is used due to CACHE INDEX failed for
+--echo # key_cache_none.
+LOAD INDEX INTO CACHE t1;
+DROP TABLE t1;
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 4320cef2c49..2bb758f8b86 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -2680,6 +2680,11 @@ bool mysql_assign_to_keycache(THD* thd, TABLE_LIST* tables,
DBUG_RETURN(TRUE);
}
pthread_mutex_unlock(&LOCK_global_system_variables);
+ if (!key_cache->key_cache_inited)
+ {
+ my_error(ER_UNKNOWN_KEY_CACHE, MYF(0), key_cache_name->str);
+ DBUG_RETURN(TRUE);
+ }
check_opt.key_cache= key_cache;
DBUG_RETURN(mysql_admin_table(thd, tables, &check_opt,
"assign_to_keycache", TL_READ_NO_INSERT, 0, 0,