#include #include #include #include #include #define JEMALLOC_MANGLE #include "jemalloc_test.h" int main(void) { int ret, err; size_t sz, lg_chunk, chunksize, i; char *p, *q; malloc_printf("Test begin\n"); sz = sizeof(lg_chunk); if ((err = mallctl("opt.lg_chunk", &lg_chunk, &sz, NULL, 0))) { assert(err != ENOENT); malloc_printf("%s(): Error in mallctl(): %s\n", __func__, strerror(err)); ret = 1; goto label_return; } chunksize = ((size_t)1U) << lg_chunk; p = (char *)malloc(chunksize); if (p == NULL) { malloc_printf("malloc(%zu) --> %p\n", chunksize, p); ret = 1; goto label_return; } memset(p, 'a', chunksize); q = (char *)realloc(p, chunksize * 2); if (q == NULL) { malloc_printf("realloc(%p, %zu) --> %p\n", p, chunksize * 2, q); ret = 1; goto label_return; } for (i = 0; i < chunksize; i++) { assert(q[i] == 'a'); } p = q; q = (char *)realloc(p, chunksize); if (q == NULL) { malloc_printf("realloc(%p, %zu) --> %p\n", p, chunksize, q); ret = 1; goto label_return; } for (i = 0; i < chunksize; i++) { assert(q[i] == 'a'); } free(q); ret = 0; label_return: malloc_printf("Test end\n"); return (ret); }