From owner-freebsd-hackers@FreeBSD.ORG Wed Jan 26 00:51:03 2005 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 2C80216A4CF for ; Wed, 26 Jan 2005 00:51:03 +0000 (GMT) Received: from panther.cs.ucla.edu (Panther.CS.UCLA.EDU [131.179.128.25]) by mx1.FreeBSD.org (Postfix) with ESMTP id E840243D3F for ; Wed, 26 Jan 2005 00:51:02 +0000 (GMT) (envelope-from yanyu@CS.UCLA.EDU) Received: from localhost (yanyu@localhost)j0Q0opC05978; Tue, 25 Jan 2005 16:50:52 -0800 (PST) Date: Tue, 25 Jan 2005 16:50:51 -0800 (PST) From: Yan Yu To: Jose Hidalgo Herrera In-Reply-To: <1106698640.1383.3.camel@jose.hostarica.net> Message-ID: References: <41F6C27D.3040302@elischer.org> <1106698640.1383.3.camel@jose.hostarica.net> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII cc: freebsd-hackers@freebsd.org cc: Julian Elischer Subject: Re: seg fault on kse_release () (fwd) X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 26 Jan 2005 00:51:03 -0000 Cool, Thanks A LOT for looking into this! I appreciate it! after I reduce the BSIZE to 50k, it can create more than 10k threads before calloc error.. so i am going to drop this thread:) (just fyi, i use your prog on our machine w/ BSIZE =500k (~512M Ram), again i got SEG fault before the calloc error after it creates 913 threads, this number is repeatable.. so it is wierd.. as suggested by others, it might be a lib related prob., we may use a diff lib etc.. i am going to look into this later.. Thanks again! yan On Tue, 25 Jan 2005, Jose Hidalgo Herrera wrote: > This is my last try!, it worked for me, I reached a little more that > 1000 threads, then I got the calloc error. > :-) > > > > > > #include > #include > #include > #include > > #define NUM_THREADS 5000 > #define THREADS_IN_ONE_PROCESS 5 > #define BSIZE 500000 > > static int cc; > > void *PrintHello(void *); > > pthread_mutex_t mtx; > > void CreateThread(int n, int myid) > { > int rc, t; > unsigned long id; > char * p; > pthread_t threads[NUM_THREADS]; > assert( n <= NUM_THREADS ); > for(t=0;t < n;t++){ > printf("id:%d Creating thread %d\n",myid,t); > rc = pthread_create(&threads[t], NULL, PrintHello, NULL); > if (rc){ > printf("ERROR; return code from pthread_create() is %d\n", rc); > } > } > > pthread_mutex_lock(&mtx); > p = (char *) calloc(BSIZE, sizeof(char) ); > if ( p == NULL ) > { > pthread_mutex_unlock(&mtx); > perror("calloc"); > pthread_exit(NULL); > } > pthread_mutex_unlock(&mtx); > > while (1) > { > while (BSIZE <= (id = rand() / (RAND_MAX/BSIZE))); > p[id] ++; > } > } > > > void *PrintHello(void * threadid) > { > int * myid=NULL; > > pthread_mutex_lock(&mtx); > myid=(int *)malloc(sizeof(int)); > if (myid==NULL){ > pthread_mutex_unlock(&mtx); > perror("malloc"); > pthread_exit(NULL); > } > *myid= cc++; > pthread_mutex_unlock(&mtx); > > > printf("\n%d: Hello World!\n", *myid); > CreateThread(THREADS_IN_ONE_PROCESS,*myid); > pthread_exit(NULL); > } > > int main (int argc, char *argv[]) > { > pthread_mutex_init(&mtx, NULL); > CreateThread(THREADS_IN_ONE_PROCESS,0); > pthread_mutex_destroy(&mtx); > } > > >