1 /* stack.c - stack handling routines */
10 #include <lwp/stackdep.h>
12 #define MAX_STACK 51200
13 #define MAX_THREADS 20
17 stkalign_t *stk_stack;
20 static struct stackinfo *stacks;
23 get_stack( int *stacknop )
27 if ( stacks == NULL ) {
28 stacks = (struct stackinfo *) ch_calloc( 1, MAX_THREADS *
29 sizeof(struct stackinfo) );
32 for ( i = 0; i < MAX_THREADS; i++ ) {
33 if ( stacks[i].stk_inuse == 0 ) {
38 if ( i == MAX_THREADS ) {
39 Debug( LDAP_DEBUG_ANY,
40 "no more stacks (max %d) - increase MAX_THREADS for more",
45 if ( stacks[i].stk_stack == NULL ) {
46 stacks[i].stk_stack = (stkalign_t *) malloc(
47 (MAX_STACK / sizeof(stkalign_t) + 1 )
48 * sizeof(stkalign_t) );
52 stacks[i].stk_inuse = 1;
53 return( stacks[i].stk_stack + MAX_STACK / sizeof(stkalign_t) );
61 if ( stackno < 0 || stackno > MAX_THREADS ) {
62 Debug( LDAP_DEBUG_ANY, "free_stack of bogus stack %d",
66 stacks[stackno].stk_inuse = 0;