X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fsl_malloc.c;h=15c5b4da395dc52e68366ffcde996425f48f78ff;hb=93390425dfe797a3fa7abfdc76f99b9c4c2536ee;hp=f56328815ae26e029c2e45b20f5ae70252431cde;hpb=46e0ea292bdc0bc30eff8b72bdde484d59780942;p=openldap diff --git a/servers/slapd/sl_malloc.c b/servers/slapd/sl_malloc.c index f56328815a..15c5b4da39 100644 --- a/servers/slapd/sl_malloc.c +++ b/servers/slapd/sl_malloc.c @@ -1,8 +1,17 @@ /* sl_malloc.c - malloc routines using a per-thread slab */ /* $OpenLDAP$ */ -/* - * Copyright 2003 The OpenLDAP Foundation, All Rights Reserved. - * COPYING RESTRICTIONS APPLY, see COPYRIGHT file +/* This work is part of OpenLDAP Software . + * + * Copyright 2003 The OpenLDAP Foundation. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. + * + * A copy of this license is available in the file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . */ #include "portable.h" @@ -18,7 +27,7 @@ struct slab_heap { void *h_end; }; -static void +void sl_mem_destroy( void *key, void *data @@ -54,7 +63,7 @@ sl_mem_create( struct slab_heap *sh = NULL; int pad = 2*sizeof(int)-1; - ldap_pvt_thread_pool_getkey( ctx, sl_mem_init, (void **)&sh, NULL ); + ldap_pvt_thread_pool_getkey( ctx, (void *)sl_mem_init, (void **)&sh, NULL ); /* round up to doubleword boundary */ size += pad; @@ -63,7 +72,7 @@ sl_mem_create( if (!sh) { sh = ch_malloc( sizeof(struct slab_heap) ); sh->h_base = ch_malloc( size ); - ldap_pvt_thread_pool_setkey( ctx, sl_mem_init, (void *)sh, sl_mem_destroy ); + ldap_pvt_thread_pool_setkey( ctx, (void *)sl_mem_init, (void *)sh, sl_mem_destroy ); } else if ( size > (char *) sh->h_end - (char *) sh->h_base ) { sh->h_base = ch_realloc( sh->h_base, size ); } @@ -72,6 +81,16 @@ sl_mem_create( return sh; } +void +sl_mem_detach( + void *ctx, + void *memctx +) +{ + /* separate from context */ + ldap_pvt_thread_pool_setkey( ctx, (void *)sl_mem_init, NULL, NULL ); +} + void * sl_malloc( ber_len_t size, @@ -187,27 +206,6 @@ sl_free( void *ptr, void *ctx ) } } -void -sl_release( void *ptr, void *ctx ) -{ - struct slab_heap *sh = ctx; - - if ( sh && ptr >= sh->h_base && ptr <= sh->h_end ) { - sh->h_last = ptr; - } -} - -void * -sl_mark( void *ctx ) -{ - struct slab_heap *sh = ctx; - void *ret = NULL; - - if (sh) ret = sh->h_last; - - return ret; -} - void * sl_context( void *ptr ) { @@ -216,7 +214,7 @@ sl_context( void *ptr ) ctx = ldap_pvt_thread_pool_context(); - ldap_pvt_thread_pool_getkey( ctx, sl_mem_init, (void **)&sh, NULL ); + ldap_pvt_thread_pool_getkey( ctx, (void *)sl_mem_init, (void **)&sh, NULL ); if ( sh && ptr >= sh->h_base && ptr <= sh->h_end ) { return sh;