summaryrefslogtreecommitdiff
path: root/extra/jemalloc/test/mremap.c
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2013-08-29 16:17:44 +0200
committerSergei Golubchik <sergii@pisem.net>2013-08-29 16:17:44 +0200
commit253366e7762ef73145d3a73bf3212083522aa259 (patch)
treeb1311d61ca24740a55fa1c3f4a4bbee9f674560c /extra/jemalloc/test/mremap.c
parent28a9fea122e40bdb9f199f053cc70299656b7018 (diff)
parent4cbfd46e3d1020bfe7a87bc6dc8b2952100a7c16 (diff)
downloadmariadb-git-253366e7762ef73145d3a73bf3212083522aa259.tar.gz
merge in git://github.com/Tokutek/jemalloc
Diffstat (limited to 'extra/jemalloc/test/mremap.c')
-rw-r--r--extra/jemalloc/test/mremap.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/extra/jemalloc/test/mremap.c b/extra/jemalloc/test/mremap.c
new file mode 100644
index 00000000000..47efa7c415b
--- /dev/null
+++ b/extra/jemalloc/test/mremap.c
@@ -0,0 +1,60 @@
+#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);
+}