MDEV-5924: MariaDB could crash after changing the query_cache size
The real problem was that attempt to roll back cahnes after end of memory in QC was made incorrectly and lead to using uninitialized memory. (bug has nothing to do with resize operation, it is just lack of resources erro processed incorrectly)
This commit is contained in:
parent
61862d711d
commit
59717bbce4
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -3367,7 +3367,7 @@ Query_cache::register_tables_from_list(THD *thd, TABLE_LIST *tables_used,
|
||||
if (!insert_table(thd, key_length, key, (*block_table),
|
||||
tables_used->view_db.length, 0,
|
||||
HA_CACHE_TBL_NONTRANSACT, 0, 0, TRUE))
|
||||
DBUG_RETURN(0);
|
||||
goto err_cleanup;
|
||||
/*
|
||||
We do not need to register view tables here because they are already
|
||||
present in the global list.
|
||||
@ -3391,7 +3391,7 @@ Query_cache::register_tables_from_list(THD *thd, TABLE_LIST *tables_used,
|
||||
tables_used->callback_func,
|
||||
tables_used->engine_data,
|
||||
TRUE))
|
||||
DBUG_RETURN(0);
|
||||
goto err_cleanup;
|
||||
|
||||
if (tables_used->table->file->
|
||||
register_query_cache_dependant_tables(thd, this, block_table, &n))
|
||||
@ -3399,6 +3399,11 @@ Query_cache::register_tables_from_list(THD *thd, TABLE_LIST *tables_used,
|
||||
}
|
||||
}
|
||||
DBUG_RETURN(n - counter);
|
||||
err_cleanup:
|
||||
// Mark failed
|
||||
(*block_table)->next= (*block_table)->prev= NULL;
|
||||
(*block_table)->parent= NULL;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -3432,7 +3437,12 @@ my_bool Query_cache::register_all_tables(THD *thd,
|
||||
for (Query_cache_block_table *tmp = block->table(0) ;
|
||||
tmp != block_table;
|
||||
tmp++)
|
||||
unlink_table(tmp);
|
||||
{
|
||||
if (tmp->prev) // not marked as failed and unuseable
|
||||
unlink_table(tmp);
|
||||
else
|
||||
break;
|
||||
}
|
||||
if (block_table->parent)
|
||||
unlink_table(block_table);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user