fio: enable cross-thread overlap checking with processes
[fio.git] / lib / memalign.c
index e774c19c3ebe9980008b38afacc4c29c475ca666..537bb9fb1b92930e862426156f7b7b46c4cee8f9 100644 (file)
@@ -2,6 +2,7 @@
 #include <stdlib.h>
 
 #include "memalign.h"
+#include "smalloc.h"
 
 #define PTR_ALIGN(ptr, mask)   \
        (char *)((uintptr_t)((ptr) + (mask)) & ~(mask))
@@ -10,14 +11,18 @@ struct align_footer {
        unsigned int offset;
 };
 
-void *fio_memalign(size_t alignment, size_t size)
+void *fio_memalign(size_t alignment, size_t size, bool shared)
 {
        struct align_footer *f;
        void *ptr, *ret = NULL;
 
        assert(!(alignment & (alignment - 1)));
 
-       ptr = malloc(size + alignment + sizeof(*f) - 1);
+       if (shared)
+               ptr = smalloc(size + alignment + sizeof(*f) - 1);
+       else
+               ptr = malloc(size + alignment + sizeof(*f) - 1);
+
        if (ptr) {
                ret = PTR_ALIGN(ptr, alignment - 1);
                f = ret + size;
@@ -27,9 +32,12 @@ void *fio_memalign(size_t alignment, size_t size)
        return ret;
 }
 
-void fio_memfree(void *ptr, size_t size)
+void fio_memfree(void *ptr, size_t size, bool shared)
 {
        struct align_footer *f = ptr + size;
 
-       free(ptr - f->offset);
+       if (shared)
+               sfree(ptr - f->offset);
+       else
+               free(ptr - f->offset);
 }