From 628cd7290d371a24d59aefa529576c84a31b3341 Mon Sep 17 00:00:00 2001 From: Hallvard Furuseth <hallvard@openldap.org> Date: Sat, 2 Jan 2010 18:42:33 +0000 Subject: [PATCH] ITS#6437 cleanup (noop change): Simplify slap_sl_free() code reclaiming space --- servers/slapd/sl_malloc.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/servers/slapd/sl_malloc.c b/servers/slapd/sl_malloc.c index 5a4a7208b4..6ed639520b 100644 --- a/servers/slapd/sl_malloc.c +++ b/servers/slapd/sl_malloc.c @@ -427,23 +427,21 @@ slap_sl_free(void *ptr, void *ctx) if (!sh || ptr < sh->sh_base || ptr >= sh->sh_end) { ber_memfree_x(ptr, NULL); + } else if (sh->sh_stack) { - tmpp = (ber_len_t *)((char *)ptr + p[-1]); + size = p[-1]; + p = (ber_len_t *) ((char *) ptr + size); /* mark it free */ - tmpp[-1] |= 1; + p[-1] = size |= 1; /* reclaim free space off tail */ - while ( tmpp == sh->sh_last ) { - if ( tmpp[-1] & 1 ) { - size = tmpp[-1] ^ 1; - ptr = (char *)tmpp - size; - p = (ber_len_t *)ptr; - p--; - sh->sh_last = p; - tmpp = sh->sh_last; - } else { - break; - } + if (sh->sh_last == p) { + do { + p = (ber_len_t *) ((char *) p - size + 1) - 1; + size = p[-1]; + } while (size & 1); + sh->sh_last = p; } + } else { int size_shift, order_size; struct slab_object *so; -- GitLab