summaryrefslogtreecommitdiff
path: root/mysys/my_alloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'mysys/my_alloc.c')
-rw-r--r--mysys/my_alloc.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/mysys/my_alloc.c b/mysys/my_alloc.c
index a5b855f9604..43f26751f27 100644
--- a/mysys/my_alloc.c
+++ b/mysys/my_alloc.c
@@ -28,6 +28,11 @@
#undef EXTRA_DEBUG
#define EXTRA_DEBUG
+#ifndef DBUG_OFF
+/* Put a protected barrier after every element when using multi_alloc_root() */
+#define ALLOC_BARRIER
+#endif
+
/* data packed in MEM_ROOT -> min_malloc */
/* Don't allocate too small blocks */
@@ -396,6 +401,9 @@ void *multi_alloc_root(MEM_ROOT *root, ...)
{
length= va_arg(args, uint);
tot_length+= ALIGN_SIZE(length);
+#ifdef ALLOC_BARRIER
+ tot_length+= ALIGN_SIZE(1);
+#endif
}
va_end(args);
@@ -409,6 +417,10 @@ void *multi_alloc_root(MEM_ROOT *root, ...)
*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);