From d8d00ec45cf06e74d979b7ef3ba6ad98539fe1f7 Mon Sep 17 00:00:00 2001 From: Hallvard Furuseth Date: Sat, 2 Jan 2010 18:27:51 +0000 Subject: [PATCH] ITS#6437 cleanup (noop change): Compute pad,order_start at compile time --- servers/slapd/sl_malloc.c | 57 ++++++++++++--------------------------- 1 file changed, 17 insertions(+), 40 deletions(-) diff --git a/servers/slapd/sl_malloc.c b/servers/slapd/sl_malloc.c index 4991fd71be..5acdab88e2 100644 --- a/servers/slapd/sl_malloc.c +++ b/servers/slapd/sl_malloc.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 2003-2009 The OpenLDAP Foundation. + * Copyright 2003-2010 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -21,6 +21,13 @@ #include "slap.h" +enum { + Align = 2 * sizeof(int), + Align_log2 = 1 + (Align>2) + (Align>4) + (Align>8) + (Align>16), + order_start = Align_log2 - 1, + pad = Align - 1 +}; + static struct slab_object * slap_replenish_sopool(struct slab_heap* sh); #ifdef SLAPD_UNUSED static void print_slheap(int level, void *ctx); @@ -34,16 +41,10 @@ slap_sl_mem_destroy( ) { struct slab_heap *sh = data; - int pad = 2*sizeof(int)-1, pad_shift; - int order_start = -1, i; struct slab_object *so; + int i; if (!sh->sh_stack) { - pad_shift = pad - 1; - do { - order_start++; - } while (pad_shift >>= 1); - for (i = 0; i <= sh->sh_maxorder - order_start; i++) { so = LDAP_LIST_FIRST(&sh->sh_free[i]); while (so) { @@ -84,6 +85,10 @@ BerMemoryFunctions slap_sl_mfuncs = void slap_sl_mem_init() { + assert( Align == 1 << Align_log2 ); + /* Adding head+tail preserves alignment */ + assert( 2*sizeof(ber_len_t) % Align == 0 ); + ber_set_option( NULL, LBER_OPT_MEMORY_FNS, &slap_sl_mfuncs ); } @@ -109,9 +114,6 @@ slap_sl_mem_create( { struct slab_heap *sh; ber_len_t size_shift; - int pad = 2*sizeof(int)-1, pad_shift; - int order = -1, order_start = -1, order_end = -1; - int i; struct slab_object *so; #ifdef NO_THREADS @@ -160,15 +162,12 @@ slap_sl_mem_create( sh->sh_last = i; } } else { + int i, order = -1, order_end = -1; + size_shift = size - 1; do { order_end++; } while (size_shift >>= 1); - - pad_shift = pad - 1; - do { - order_start++; - } while (pad_shift >>= 1); order = order_end - order_start + 1; sh->sh_maxorder = order_end; @@ -226,7 +225,6 @@ slap_sl_malloc( ) { struct slab_heap *sh = ctx; - int pad = 2*sizeof(int)-1, pad_shift; ber_len_t *ptr, *newptr; #ifdef SLAP_NO_SL_MALLOC @@ -264,20 +262,14 @@ slap_sl_malloc( } else { struct slab_object *so_new, *so_left, *so_right; ber_len_t size_shift; - int order = -1, order_start = -1; unsigned long diff; - int i, j; + int i, j, order = -1; size_shift = size - 1; do { order++; } while (size_shift >>= 1); - pad_shift = pad - 1; - do { - order_start++; - } while (pad_shift >>= 1); - for (i = order; i <= sh->sh_maxorder && LDAP_LIST_EMPTY(&sh->sh_free[i-order_start]); i++); @@ -347,7 +339,6 @@ void * slap_sl_realloc(void *ptr, ber_len_t size, void *ctx) { struct slab_heap *sh = ctx; - int pad = 2*sizeof(int) -1; ber_len_t *p = (ber_len_t *)ptr, *newptr; if (ptr == NULL) @@ -455,11 +446,9 @@ slap_sl_free(void *ptr, void *ctx) } } else { int size_shift, order_size; - int pad = 2*sizeof(int)-1, pad_shift; - int order_start = -1, order = -1; struct slab_object *so; unsigned long diff; - int i, inserted = 0; + int i, inserted = 0, order = -1; size = *(--p); size_shift = size + sizeof(ber_len_t) - 1; @@ -467,11 +456,6 @@ slap_sl_free(void *ptr, void *ctx) order++; } while (size_shift >>= 1); - pad_shift = pad - 1; - do { - order_start++; - } while (pad_shift >>= 1); - for (i = order, tmpp = p; i <= sh->sh_maxorder; i++) { order_size = 1 << (i+1); diff = (unsigned long)((char*)tmpp - (char*)sh->sh_base) >> (i+1); @@ -638,8 +622,6 @@ static void print_slheap(int level, void *ctx) { struct slab_heap *sh = ctx; - int order_start = -1; - int pad = 2*sizeof(int)-1, pad_shift; struct slab_object *so; int i, j, once = 0; @@ -648,11 +630,6 @@ print_slheap(int level, void *ctx) return; } - pad_shift = pad - 1; - do { - order_start++; - } while (pad_shift >>= 1); - Debug(level, "sh->sh_maxorder=%d\n", sh->sh_maxorder, 0, 0); for (i = order_start; i <= sh->sh_maxorder; i++) {