seg fault on kse_release ()

Yan Yu yanyu at CS.UCLA.EDU
Mon Jan 24 14:25:39 PST 2005


Hi, all,  I have a newbie Q:
    I am trying to use creating large number of threads and allocting
memory to stress the system.
My user program causes SEG fault in the kernel code, kse_release () in
kern_kse.c.

the stack when the SEG fault happens are:
#0  0x08064e54 in kse_release ()
#1  0x080531c4 in kse_sched_single ()
#2  0x00000000 in ?? ()

My simple program is:
I have a simple function to create threads:

#define NUM_THREADS     5000
#define THREADS_IN_ONE_PROCESS  5
#define BSIZE  500000
static int  cc;

void CreateThread(int n)
{
   assert( n <= NUM_THREADS );
   pthread_t threads[NUM_THREADS];
   int rc, t;
   for(t=0;t < n;t++){
      printf("#%d: Creating thread %d\n", cc, t);
      cc++;
      rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
      if (rc){
         printf("ERROR; return code from pthread_create() is %d\n", rc);
      }
   }

   unsigned long id;
   char * p = (char *) calloc(BSIZE, sizeof(char) );
   if ( p == NULL )
   {
        fprintf(stderr, "calloc error\n");
   }
   while (1)
   {
        while (BSIZE <= (id = rand() / (RAND_MAX/BSIZE)));
        p[id] ++;
   }
}

void *PrintHello(void *threadid)
{
   printf("\n%d: Hello World!\n", threadid);
   CreateThread(THREADS_IN_ONE_PROCESS);
   pthread_exit(NULL);
}

int main (int argc, char *argv[])
{
   CreateThread(THREADS_IN_ONE_PROCESS);
}

The SEG fault happens after creating nearly 5000 threads.
and I use the default pthread.h coming w/ freeBSD 5.3
#define PTHREAD_KEYS_MAX                        256
#define PTHREAD_STACK_MIN                       (1 << 22)
#define PTHREAD_THREADS_MAX                     ULONG_MAX


Any idea on what might happen?

Many Thanks!
yan


More information about the freebsd-threads mailing list