diff options
author | Jason Evans <je@fb.com> | 2010-12-01 00:50:58 (GMT) |
---|---|---|
committer | Jason Evans <je@fb.com> | 2010-12-01 00:50:58 (GMT) |
commit | cfdc8cfbd626e83d38417bd8c73ac018b611e390 (patch) | |
tree | 7adad90dfe6ed086e698c94fda910d974f1b8500 /jemalloc/test | |
parent | aee7fd2b70050fb434f2c9f52153194de73dc051 (diff) | |
download | jemalloc-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.c | 67 | ||||
-rw-r--r-- | jemalloc/test/mremap.exp | 2 |
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 |