1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-07 00:04:31 +03:00

Fix that end_bulk_insert() doesn't write to to-be-deleted files

This affected mainly MyISAM and Aria engines.
Also fixed that end_bulk_insert() detects errors from
internal mi_end_bulk_insert() and ma_end_bulk_insert()

- delete_tree() and delete_tree_element() now has an
  extra argument that marks if future calls to
  tree->free should be ignored.
- tree->free changed to function returning int, to be
  able to signal errors.
- Restored deleting flag in MyISAM that was accidently
  disabled in mi_extra(PREPARE_FOR_DROP)
This commit is contained in:
Monty
2017-05-17 00:34:48 +03:00
parent 314350a722
commit 6378c95ee0
24 changed files with 159 additions and 85 deletions

View File

@@ -48,7 +48,7 @@ typedef uint32 element_count;
typedef int (*tree_walk_action)(void *,element_count,void *);
typedef enum { free_init, free_free, free_end } TREE_FREE;
typedef void (*tree_element_free)(void*, TREE_FREE, void *);
typedef int (*tree_element_free)(void*, TREE_FREE, void *);
typedef struct st_tree_element {
struct st_tree_element *left,*right;
@@ -77,8 +77,8 @@ void init_tree(TREE *tree, size_t default_alloc_size, size_t memory_limit,
int size, qsort_cmp2 compare,
tree_element_free free_element, void *custom_arg,
myf my_flags);
void delete_tree(TREE*);
void reset_tree(TREE*);
int delete_tree(TREE*, my_bool abort);
int reset_tree(TREE*);
/* similar to delete tree, except we do not my_free() blocks in mem_root */
#define is_tree_inited(tree) ((tree)->root != 0)