aboutsummaryrefslogtreecommitdiff
path: root/src/arena.c
diff options
context:
space:
mode:
authorJason Evans <je@fb.com>2015-01-29 15:30:47 -0800
committerJason Evans <je@fb.com>2015-02-09 17:44:48 -0800
commit1cb181ed632e7573fb4eab194e4d216867222d27 (patch)
treed13f78861074ae4547a475a422659cbc504099f6 /src/arena.c
parent23694b07457f3aaf9605a4ff6b386f3c897eb624 (diff)
downloadjemalloc-1cb181ed632e7573fb4eab194e4d216867222d27.tar.gz
Implement explicit tcache support.
Add the MALLOCX_TCACHE() and MALLOCX_TCACHE_NONE macros, which can be used in conjunction with the *allocx() API. Add the tcache.create, tcache.flush, and tcache.destroy mallctls. This resolves #145.
Diffstat (limited to 'src/arena.c')
-rw-r--r--src/arena.c24
1 files changed, 9 insertions, 15 deletions
diff --git a/src/arena.c b/src/arena.c
index a5033bf..907fbd7 100644
--- a/src/arena.c
+++ b/src/arena.c
@@ -2182,8 +2182,7 @@ arena_ralloc_no_move(void *ptr, size_t oldsize, size_t size, size_t extra,
void *
arena_ralloc(tsd_t *tsd, arena_t *arena, void *ptr, size_t oldsize, size_t size,
- size_t extra, size_t alignment, bool zero, bool try_tcache_alloc,
- bool try_tcache_dalloc)
+ size_t extra, size_t alignment, bool zero, tcache_t *tcache)
{
void *ret;
size_t copysize;
@@ -2201,12 +2200,9 @@ arena_ralloc(tsd_t *tsd, arena_t *arena, void *ptr, size_t oldsize, size_t size,
size_t usize = sa2u(size + extra, alignment);
if (usize == 0)
return (NULL);
- ret = ipalloct(tsd, usize, alignment, zero, try_tcache_alloc,
- arena);
- } else {
- ret = arena_malloc(tsd, arena, size + extra, zero,
- try_tcache_alloc);
- }
+ ret = ipalloct(tsd, usize, alignment, zero, tcache, arena);
+ } else
+ ret = arena_malloc(tsd, arena, size + extra, zero, tcache);
if (ret == NULL) {
if (extra == 0)
@@ -2216,12 +2212,10 @@ arena_ralloc(tsd_t *tsd, arena_t *arena, void *ptr, size_t oldsize, size_t size,
size_t usize = sa2u(size, alignment);
if (usize == 0)
return (NULL);
- ret = ipalloct(tsd, usize, alignment, zero,
- try_tcache_alloc, arena);
- } else {
- ret = arena_malloc(tsd, arena, size, zero,
- try_tcache_alloc);
- }
+ ret = ipalloct(tsd, usize, alignment, zero, tcache,
+ arena);
+ } else
+ ret = arena_malloc(tsd, arena, size, zero, tcache);
if (ret == NULL)
return (NULL);
@@ -2236,7 +2230,7 @@ arena_ralloc(tsd_t *tsd, arena_t *arena, void *ptr, size_t oldsize, size_t size,
copysize = (size < oldsize) ? size : oldsize;
JEMALLOC_VALGRIND_MAKE_MEM_UNDEFINED(ret, copysize);
memcpy(ret, ptr, copysize);
- isqalloc(tsd, ptr, oldsize, try_tcache_dalloc);
+ isqalloc(tsd, ptr, oldsize, tcache);
return (ret);
}