From: Hallvard Furuseth Date: Sat, 2 Jan 2010 18:42:33 +0000 (+0000) Subject: ITS#6437 cleanup (noop change): Simplify slap_sl_free() code reclaiming space X-Git-Tag: OPENLDAP_REL_ENG_2_4_27~206 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=628cd7290d371a24d59aefa529576c84a31b3341;p=openldap ITS#6437 cleanup (noop change): Simplify slap_sl_free() code reclaiming space --- 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;