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