Commit dd5beeac authored by Aditya A's avatar Aditya A

Bug#14756795 SELECT FROM NEW INNODB I_S TABLES CRASHES SERVER

              WITH --SKIP-INNODB

Description
-----------

If the server is started with skip-innodb or InnoDB otherwise fails to
start, any one of these queries will crash the server:

For (5.5) 
SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE;
SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU;
SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_POOL_STATS;

In (5.6+) ,following queries will also crash the server.

SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES;
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES;
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS;
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS;
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN;
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS;
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS;
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_DATAFILES;
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES;

FIX
----

When Innodb is not active we must prevent it from processing
these tables,so we return a warning saying that innodb is not
active.

Approved by marko (http://rb.no.oracle.com/rb/r/1891)
parent 7485b6c6
...@@ -2295,6 +2295,7 @@ i_s_innodb_buffer_stats_fill_table( ...@@ -2295,6 +2295,7 @@ i_s_innodb_buffer_stats_fill_table(
buf_pool_info_t* pool_info; buf_pool_info_t* pool_info;
DBUG_ENTER("i_s_innodb_buffer_fill_general"); DBUG_ENTER("i_s_innodb_buffer_fill_general");
RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
/* Only allow the PROCESS privilege holder to access the stats */ /* Only allow the PROCESS privilege holder to access the stats */
if (check_global_access(thd, PROCESS_ACL)) { if (check_global_access(thd, PROCESS_ACL)) {
...@@ -2911,6 +2912,7 @@ i_s_innodb_fill_buffer_pool( ...@@ -2911,6 +2912,7 @@ i_s_innodb_fill_buffer_pool(
mem_heap_t* heap; mem_heap_t* heap;
DBUG_ENTER("i_s_innodb_fill_buffer_pool"); DBUG_ENTER("i_s_innodb_fill_buffer_pool");
RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
heap = mem_heap_create(10000); heap = mem_heap_create(10000);
...@@ -3480,6 +3482,7 @@ i_s_innodb_fill_buffer_lru( ...@@ -3480,6 +3482,7 @@ i_s_innodb_fill_buffer_lru(
ulint lru_len; ulint lru_len;
DBUG_ENTER("i_s_innodb_fill_buffer_lru"); DBUG_ENTER("i_s_innodb_fill_buffer_lru");
RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
/* Obtain buf_pool mutex before allocate info_buffer, since /* Obtain buf_pool mutex before allocate info_buffer, since
UT_LIST_GET_LEN(buf_pool->LRU) could change */ UT_LIST_GET_LEN(buf_pool->LRU) could change */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment