diff options
author | Sergei Golubchik <serg@mariadb.org> | 2018-01-21 12:53:17 +0100 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2018-01-22 11:39:54 +0100 |
commit | dc28b6d180a00658debf65b1258bd5fdf0d0c26e (patch) | |
tree | 7330c705e6a05539e81721def935fb96e760efd4 /mysys | |
parent | a966d422ca56d1772b9f975a8ef48442ae528f0a (diff) | |
download | mariadb-git-dc28b6d180a00658debf65b1258bd5fdf0d0c26e.tar.gz |
improve ASAN instrumentation: MEM_ROOT
more complete TRASH-ing of memroots
Diffstat (limited to 'mysys')
-rw-r--r-- | mysys/my_alloc.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/mysys/my_alloc.c b/mysys/my_alloc.c index d7bc4247556..24e95d2c69c 100644 --- a/mysys/my_alloc.c +++ b/mysys/my_alloc.c @@ -22,6 +22,8 @@ #undef EXTRA_DEBUG #define EXTRA_DEBUG +#define TRASH_MEM(X) TRASH_FREE(((char*)(X) + ((X)->size-(X)->left)), (X)->left) + /* Initialize memory root @@ -60,12 +62,13 @@ void init_alloc_root(MEM_ROOT *mem_root, size_t block_size, if (pre_alloc_size) { if ((mem_root->free= mem_root->pre_alloc= - (USED_MEM*) my_malloc(pre_alloc_size+ ALIGN_SIZE(sizeof(USED_MEM)), + (USED_MEM*) my_malloc(pre_alloc_size + ALIGN_SIZE(sizeof(USED_MEM)), MYF(0)))) { mem_root->free->size= pre_alloc_size+ALIGN_SIZE(sizeof(USED_MEM)); mem_root->free->left= pre_alloc_size; mem_root->free->next= 0; + TRASH_MEM(mem_root->free); } } #endif @@ -132,6 +135,7 @@ void reset_root_defaults(MEM_ROOT *mem_root, size_t block_size, mem->left= pre_alloc_size; mem->next= *prev; *prev= mem_root->pre_alloc= mem; + TRASH_MEM(mem); } else { @@ -225,6 +229,7 @@ void *alloc_root(MEM_ROOT *mem_root, size_t length) next->size= get_size; next->left= get_size-ALIGN_SIZE(sizeof(USED_MEM)); *prev=next; + TRASH_MEM(next); } point= (uchar*) ((char*) next+ (next->size-next->left)); @@ -293,8 +298,6 @@ void *multi_alloc_root(MEM_ROOT *root, ...) DBUG_RETURN((void*) start); } -#define TRASH_MEM(X) TRASH_FREE(((char*)(X) + ((X)->size-(X)->left)), (X)->left) - /* Mark all data in blocks free for reusage */ static inline void mark_blocks_free(MEM_ROOT* root) |