Date: Tue, 25 Jan 2005 14:04:45 -0800 From: Julian Elischer <julian@elischer.org> To: jose@hostarica.com Cc: Yan Yu <yanyu@CS.UCLA.EDU> Subject: Re: seg fault on kse_release () (fwd) Message-ID: <41F6C27D.3040302@elischer.org> In-Reply-To: <1106686056.4973.6.camel@jose.hostarica.net> References: <Pine.GSO.4.58.0501241426470.2472@panther.cs.ucla.edu> <1106669661.9523.7.camel@jose.hostarica.net> <Pine.GSO.4.58.0501251028210.8888@panther.cs.ucla.edu> <1106686056.4973.6.camel@jose.hostarica.net>
next in thread | previous in thread | raw e-mail | index | archive | help
Jose Hidalgo Herrera wrote: >The line causing the SEGFAULT is >rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t); > >Why?, because t is declared as: >int t; >then you say: >args for start_routine in pthread_create are located in the address: t > >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). > >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 "freebsd-hackers-unsubscribe@freebsd.org" >>>> >>>>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?41F6C27D.3040302>