1 /* stack.c - stack handling routines */
11 #include <lwp/stackdep.h>
13 #define MAX_STACK 51200
14 #define MAX_THREADS 20
18 stkalign_t *stk_stack;
21 static struct stackinfo *stacks;
24 get_stack( int *stacknop )
28 if ( stacks == NULL ) {
29 stacks = (struct stackinfo *) ch_calloc( 1, MAX_THREADS *
30 sizeof(struct stackinfo) );
33 for ( i = 0; i < MAX_THREADS; i++ ) {
34 if ( stacks[i].stk_inuse == 0 ) {
39 if ( i == MAX_THREADS ) {
40 Debug( LDAP_DEBUG_ANY,
41 "no more stacks (max %d) - increase MAX_THREADS for more",
46 if ( stacks[i].stk_stack == NULL ) {
47 stacks[i].stk_stack = (stkalign_t *) malloc(
48 (MAX_STACK / sizeof(stkalign_t) + 1 )
49 * sizeof(stkalign_t) );
53 stacks[i].stk_inuse = 1;
54 return( stacks[i].stk_stack + MAX_STACK / sizeof(stkalign_t) );
62 if ( stackno < 0 || stackno > MAX_THREADS ) {
63 Debug( LDAP_DEBUG_ANY, "free_stack of bogus stack %d",
67 stacks[stackno].stk_inuse = 0;