seg fault on kse_release () (fwd)

Yan Yu yanyu at CS.UCLA.EDU
Tue Jan 25 13:08:39 PST 2005


Hi, THanks a lot for the reply!
in the call to pthread_create(), i cast _t_ to a void pointer, since
that is pthread_create() function prototype asks for.. then in line
> printf("\n%d: Hello World!\n", threadid);
I use it as (cast it to) a _int_..
or i missed something here, is there a reason that i canot do this?

I just tried what you suggested,
> rc = pthread_create(&threads[t], NULL, PrintHello, (void *) & t);
and change _printf_ line to
>   printf("\n%d: Hello World!\n", * (int *)threadid);
I got the same SEG fault error.

Thanks for any pointers!
yan


> 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);
>
> 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 at freebsd.org mailing list
> > > > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> > > > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
> > >
>


More information about the freebsd-hackers mailing list