]> git.sur5r.net Git - openldap/commitdiff
ITS#6437 cleanup (noop change): Compute pad,order_start at compile time
authorHallvard Furuseth <hallvard@openldap.org>
Sat, 2 Jan 2010 18:27:51 +0000 (18:27 +0000)
committerHallvard Furuseth <hallvard@openldap.org>
Sat, 2 Jan 2010 18:27:51 +0000 (18:27 +0000)
servers/slapd/sl_malloc.c

index 4991fd71be64a99a726434d3a40276af64325713..5acdab88e2abd54a4e1e1cfa64a22b13c0ac3962 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * 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
 
 #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++) {