> > > >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]"