summaryrefslogtreecommitdiffstats
path: root/jemalloc/test
diff options
context:
space:
mode:
authorJason Evans <je@fb.com>2010-12-01 00:50:58 (GMT)
committerJason Evans <je@fb.com>2010-12-01 00:50:58 (GMT)
commitcfdc8cfbd626e83d38417bd8c73ac018b611e390 (patch)
tree7adad90dfe6ed086e698c94fda910d974f1b8500 /jemalloc/test
parentaee7fd2b70050fb434f2c9f52153194de73dc051 (diff)
downloadjemalloc-cfdc8cfbd626e83d38417bd8c73ac018b611e390.zip
jemalloc-cfdc8cfbd626e83d38417bd8c73ac018b611e390.tar.gz
jemalloc-cfdc8cfbd626e83d38417bd8c73ac018b611e390.tar.bz2
Use mremap(2) for huge realloc().
If mremap(2) is available and supports MREMAP_FIXED, use it for huge realloc(). Initialize rtree later during bootstrapping, so that --enable-debug --enable-dss works. Fix a minor swap_avail stats bug.
Diffstat (limited to 'jemalloc/test')
-rw-r--r--jemalloc/test/mremap.c67
-rw-r--r--jemalloc/test/mremap.exp2
2 files changed, 69 insertions, 0 deletions
diff --git a/jemalloc/test/mremap.c b/jemalloc/test/mremap.c
new file mode 100644
index 0000000..146c66f
--- /dev/null
+++ b/jemalloc/test/mremap.c
@@ -0,0 +1,67 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <errno.h>
+#include <string.h>
+
+#define JEMALLOC_MANGLE
+#include "jemalloc_test.h"
+
+int
+main(void)
+{
+ int ret, err;
+ size_t sz, lg_chunk, chunksize, i;
+ char *p, *q;
+
+ fprintf(stderr, "Test begin\n");
+
+ sz = sizeof(lg_chunk);
+ if ((err = JEMALLOC_P(mallctl)("opt.lg_chunk", &lg_chunk, &sz, NULL,
+ 0))) {
+ assert(err != ENOENT);
+ fprintf(stderr, "%s(): Error in mallctl(): %s\n", __func__,
+ strerror(err));
+ ret = 1;
+ goto RETURN;
+ }
+ chunksize = ((size_t)1U) << lg_chunk;
+
+ p = (char *)malloc(chunksize);
+ if (p == NULL) {
+ fprintf(stderr, "malloc(%zu) --> %p\n", chunksize, p);
+ ret = 1;
+ goto RETURN;
+ }
+ memset(p, 'a', chunksize);
+
+ q = (char *)realloc(p, chunksize * 2);
+ if (q == NULL) {
+ fprintf(stderr, "realloc(%p, %zu) --> %p\n", p, chunksize * 2,
+ q);
+ ret = 1;
+ goto RETURN;
+ }
+ for (i = 0; i < chunksize; i++) {
+ assert(q[i] == 'a');
+ }
+
+ p = q;
+
+ q = (char *)realloc(p, chunksize);
+ if (q == NULL) {
+ fprintf(stderr, "realloc(%p, %zu) --> %p\n", p, chunksize, q);
+ ret = 1;
+ goto RETURN;
+ }
+ for (i = 0; i < chunksize; i++) {
+ assert(q[i] == 'a');
+ }
+
+ free(q);
+
+ ret = 0;
+RETURN:
+ fprintf(stderr, "Test end\n");
+ return (ret);
+}
diff --git a/jemalloc/test/mremap.exp b/jemalloc/test/mremap.exp
new file mode 100644
index 0000000..369a88d
--- /dev/null
+++ b/jemalloc/test/mremap.exp
@@ -0,0 +1,2 @@
+Test begin
+Test end