summaryrefslogtreecommitdiff
path: root/mysys/mulalloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'mysys/mulalloc.c')
-rw-r--r--mysys/mulalloc.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/mysys/mulalloc.c b/mysys/mulalloc.c
index 357f9315f2b..51f8d61b574 100644
--- a/mysys/mulalloc.c
+++ b/mysys/mulalloc.c
@@ -17,6 +17,11 @@
#include "mysys_priv.h"
#include <stdarg.h>
+#ifndef DBUG_OFF
+/* Put a protected barrier after every element when using my_multi_malloc() */
+#define ALLOC_BARRIER
+#endif
+
/*
Malloc many pointers at the same time
Only ptr1 can be free'd, and doing this will free all
@@ -45,6 +50,9 @@ void* my_multi_malloc(PSI_memory_key key, myf myFlags, ...)
{
length=va_arg(args,uint);
tot_length+=ALIGN_SIZE(length);
+#ifdef ALLOC_BARRIER
+ tot_length+= ALIGN_SIZE(1);
+#endif
}
va_end(args);
@@ -58,6 +66,10 @@ void* my_multi_malloc(PSI_memory_key key, myf myFlags, ...)
*ptr=res;
length=va_arg(args,uint);
res+=ALIGN_SIZE(length);
+#ifdef ALLOC_BARRIER
+ TRASH_FREE(res, ALIGN_SIZE(1));
+ res+= ALIGN_SIZE(1);
+#endif
}
va_end(args);
DBUG_RETURN((void*) start);
@@ -89,6 +101,9 @@ void *my_multi_malloc_large(PSI_memory_key key, myf myFlags, ...)
{
length=va_arg(args,ulonglong);
tot_length+=ALIGN_SIZE(length);
+#ifdef ALLOC_BARRIER
+ tot_length+= ALIGN_SIZE(1);
+#endif
}
va_end(args);
@@ -102,6 +117,10 @@ void *my_multi_malloc_large(PSI_memory_key key, myf myFlags, ...)
*ptr=res;
length=va_arg(args,ulonglong);
res+=ALIGN_SIZE(length);
+#ifdef ALLOC_BARRIER
+ TRASH_FREE(res, ALIGN_SIZE(1));
+ res+= ALIGN_SIZE(1);
+#endif
}
va_end(args);
DBUG_RETURN((void*) start);