mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 11:45:32 +00:00
BUG#18160 - Memory-/HEAP Table endless growing indexes
Updating data in HEAP table with BTREE index results in wrong index_length counter value, which keeps growing after each update. When inserting new record into tree counter is incremented by: sizeof(TREE_ELEMENT) + key_size + tree->size_of_element But when deleting element from tree it doesn't decrement counter by key_size: sizeof(TREE_ELEMENT) + tree->size_of_element This fix makes accurate allocated memory counter for tree. That is decrease counter by key_size when deleting tree element.
This commit is contained in:
@ -271,7 +271,7 @@ TREE_ELEMENT *tree_insert(TREE *tree, void *key, uint key_size,
|
||||
return element;
|
||||
}
|
||||
|
||||
int tree_delete(TREE *tree, void *key, void *custom_arg)
|
||||
int tree_delete(TREE *tree, void *key, uint key_size, void *custom_arg)
|
||||
{
|
||||
int cmp,remove_colour;
|
||||
TREE_ELEMENT *element,***parent, ***org_parent, *nod;
|
||||
@ -326,8 +326,7 @@ int tree_delete(TREE *tree, void *key, void *custom_arg)
|
||||
rb_delete_fixup(tree,parent);
|
||||
if (tree->free)
|
||||
(*tree->free)(ELEMENT_KEY(tree,element), free_free, tree->custom_arg);
|
||||
/* This doesn't include key_size, but better than nothing */
|
||||
tree->allocated-= sizeof(TREE_ELEMENT)+tree->size_of_element;
|
||||
tree->allocated-= sizeof(TREE_ELEMENT) + tree->size_of_element + key_size;
|
||||
my_free((gptr) element,MYF(0));
|
||||
tree->elements_in_tree--;
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user