From: Howard Chu Date: Thu, 27 May 2004 08:54:34 +0000 (+0000) Subject: Fix ITS#3155 X-Git-Tag: OPENDLAP_REL_ENG_2_2_MP~322 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=0bcb9c31502c3b5660a50aed9f0ba5e4e8e5a402;p=openldap Fix ITS#3155 --- diff --git a/servers/slapd/sl_malloc.c b/servers/slapd/sl_malloc.c index 7b8d327cb9..2a59d023f9 100644 --- a/servers/slapd/sl_malloc.c +++ b/servers/slapd/sl_malloc.c @@ -48,6 +48,10 @@ slap_sl_mem_init() ber_set_option( NULL, LBER_OPT_MEMORY_FNS, &slap_sl_mfuncs ); } +#ifdef NO_THREADS +static struct slab_heap *slheap; +#endif + void * slap_sl_mem_create( ber_len_t size, @@ -57,7 +61,11 @@ slap_sl_mem_create( struct slab_heap *sh = NULL; int pad = 2*sizeof(int)-1; +#ifdef NO_THREADS + sh = slheap; +#else ldap_pvt_thread_pool_getkey( ctx, (void *)slap_sl_mem_init, (void **)&sh, NULL ); +#endif /* round up to doubleword boundary */ size += pad; @@ -66,8 +74,12 @@ slap_sl_mem_create( if (!sh) { sh = ch_malloc( sizeof(struct slab_heap) ); sh->h_base = ch_malloc( size ); +#ifdef NO_THREADS + slheap = sh; +#else ldap_pvt_thread_pool_setkey( ctx, (void *)slap_sl_mem_init, (void *)sh, slap_sl_mem_destroy ); +#endif } else if ( size > (char *) sh->h_end - (char *) sh->h_base ) { sh->h_base = ch_realloc( sh->h_base, size ); } @@ -82,8 +94,12 @@ slap_sl_mem_detach( void *memctx ) { +#ifdef NO_THREADS + slheap = NULL; +#else /* separate from context */ ldap_pvt_thread_pool_setkey( ctx, (void *)slap_sl_mem_init, NULL, NULL ); +#endif } void * @@ -209,9 +225,13 @@ slap_sl_context( void *ptr ) struct slab_heap *sh = NULL; void *ctx; +#ifdef NO_THREADS + sh = slheap; +#else ctx = ldap_pvt_thread_pool_context(); ldap_pvt_thread_pool_getkey( ctx, (void *)slap_sl_mem_init, (void **)&sh, NULL ); +#endif if ( sh && ptr >= sh->h_base && ptr <= sh->h_end ) { return sh;