]> git.sur5r.net Git - openldap/commitdiff
ITS#8725 add slap_sl_mark / slap_sl_release
authorHoward Chu <hyc@openldap.org>
Tue, 14 Mar 2017 08:50:17 +0000 (08:50 +0000)
committerHoward Chu <hyc@openldap.org>
Fri, 8 Sep 2017 16:39:22 +0000 (17:39 +0100)
For fast cleanup after constructing disposable entries

servers/slapd/proto-slap.h
servers/slapd/sl_malloc.c

index 7478067ea432b2770babc7383faf8f5679c7f5a4..84013edd317ce3b442ad1ae3a0c27c77f4196911 100644 (file)
@@ -1858,6 +1858,11 @@ LDAP_SLAPD_F (void *) slap_sl_calloc LDAP_P((
        ber_len_t nelem, ber_len_t size, void *ctx ));
 LDAP_SLAPD_F (void) slap_sl_free LDAP_P((
        void *, void *ctx ));
+LDAP_SLAPD_F (void) slap_sl_release LDAP_P((
+       void *, void *ctx ));
+LDAP_SLAPD_F (void *) slap_sl_mark LDAP_P((
+       void *ctx ));
+
 
 LDAP_SLAPD_V (BerMemoryFunctions) slap_sl_mfuncs;
 
index ff56c4f249c2258308bfb98bee799989cfbdb718..32b61f40e4937fdfd9f56dcab7a4bbbe8ac3d87e 100644 (file)
@@ -137,6 +137,9 @@ slap_sl_mem_destroy(
        struct slab_object *so;
        int i;
 
+       if (!sh)
+               return;
+
        if (!sh->sh_stack) {
                for (i = 0; i <= sh->sh_maxorder - order_start; i++) {
                        so = LDAP_LIST_FIRST(&sh->sh_free[i]);
@@ -649,6 +652,21 @@ slap_sl_free(void *ptr, void *ctx)
        }
 }
 
+void
+slap_sl_release( void *ptr, void *ctx )
+{
+       struct slab_heap *sh = ctx;
+       if ( sh && ptr >= sh->sh_base && ptr <= sh->sh_end )
+               sh->sh_last = ptr;
+}
+
+void *
+slap_sl_mark( void *ctx )
+{
+       struct slab_heap *sh = ctx;
+       return sh->sh_last;
+}
+
 /*
  * Return the memory context of the current thread if the given block of
  * memory belongs to it, otherwise return NULL.