> >
> >This will be what you want:
> >rc = pthread_create(&threads[t], NULL, PrintHello, (void *) & t);
> >
>
> probably we shouldn't crash the system however.. (it is crashing right?
> that wasn't so clear to me).
the user land prog SEG fault itself,
it did not bring down the system though,
i am not sure my reply to jose was sent out (i am in this mailing list
yet), i tried what jose suggested, the seg fault remains..

thanks,
yan

>
> >
> >You also have an error in this line:
> >
> >printf("\n%d: Hello World!\n", threadid);
> >
> >Since threadid is not an int, its a pointer
> >
> >On Tue, 2005-01-25 at 10:31 -0800, Yan Yu wrote:
> >
> >
> >>Hi, thanks a LOT for looking into this.
> >>yes, that is exactly my output before the SEG fault happens (btw, i add
> >>"if (p)" before
> >>"p[id]++ ", the prob remains..
> >>what confuses me is that, if the system is out of memory, then i should
> >>see the error returned from pthread_create() or calloc(), but not SEG
> >>fault, or i must have missed something?
> >>
> >>Thanks,
> >>yan
> >>
> >>
> >>On Tue, 25 Jan 2005, Jose Hidalgo Herrera wrote:
> >>
> >>
> >>
> >>>I ran it into:
> >>>4.11-STABLE FreeBSD Wed Jan 19 15:23:33 CST 2005
> >>>What you find in
> >>>http://www1.cr.freebsd.org/~jose/stress.tgz
> >>>is the output of:
> >>>ktrace ./a.out > stress.txt
> >>>
> >>>
> >>>On Mon, 2005-01-24 at 14:27 -0800, Yan Yu wrote:
> >>>
> >>>
> >>>>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.
> >>>>(it SEG fault before the system can be stressed;(
> >>>>
> >>>>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
> >>>>_______________________________________________
> >>>>freebsd-hackers@freebsd.org mailing list
> >>>>http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> >>>>To unsubscribe, send any mail to "[EMAIL PROTECTED]"
> >>>>
> >>>>
>
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to