From 0bcb9c31502c3b5660a50aed9f0ba5e4e8e5a402 Mon Sep 17 00:00:00 2001
From: Howard Chu <hyc@openldap.org>
Date: Thu, 27 May 2004 08:54:34 +0000
Subject: [PATCH] Fix ITS#3155

---
 servers/slapd/sl_malloc.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

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;
-- 
GitLab