From 173dd6e7a5636a098e0820ea2ce4a999781a6a61 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Sat, 25 Aug 2018 18:02:13 -0400 Subject: [PATCH] randomize slot selection for empty slabs too --- malloc.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/malloc.c b/malloc.c index 6fd7df0..b6d9866 100644 --- a/malloc.c +++ b/malloc.c @@ -330,9 +330,12 @@ static void *slab_allocate(size_t requested_size) { c->partial_slabs = metadata; void *slab = get_slab(c, slab_size, metadata); - set_slot(metadata, 0); + size_t slot = get_free_slot(&c->rng, slots, metadata); + set_slot(metadata, slot); + void *p = slot_pointer(size, slab, slot); + pthread_mutex_unlock(&c->mutex); - return slab; + return p; } struct slab_metadata *metadata = alloc_metadata(c, slab_size); @@ -349,10 +352,12 @@ static void *slab_allocate(size_t requested_size) { } c->partial_slabs = metadata; - set_slot(metadata, 0); + size_t slot = get_free_slot(&c->rng, slots, metadata); + set_slot(metadata, slot); + void *p = slot_pointer(size, slab, slot); pthread_mutex_unlock(&c->mutex); - return slab; + return p; } struct slab_metadata *metadata = c->partial_slabs;