From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16446 invoked by alias); 2 Sep 2003 20:51:19 -0000 Mailing-List: contact cygwin-help@cygwin.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner@cygwin.com Mail-Followup-To: cygwin@cygwin.com Received: (qmail 16419 invoked from network); 2 Sep 2003 20:51:18 -0000 Received: from unknown (HELO tomts24-srv.bellnexxia.net) (209.226.175.187) by sources.redhat.com with SMTP; 2 Sep 2003 20:51:18 -0000 Received: from docbill002 ([65.93.186.182]) by tomts24-srv.bellnexxia.net (InterMail vM.5.01.06.04 201-253-122-130-104-20030726) with ESMTP id <20030902205117.PFII29033.tomts24-srv.bellnexxia.net@docbill002>; Tue, 2 Sep 2003 16:51:17 -0400 Message-ID: <017f01c37193$f4c9c160$c900000a@docbill002> From: "Bill C. Riemers" To: "Juergen Bohn" , References: <3F549C88.9040103@osc-es.de> Subject: Re: malloc segfaults Date: Tue, 02 Sep 2003 20:51:00 -0000 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165 X-SW-Source: 2003-09/txt/msg00161.txt.bz2 Definitely looks like a cygwin1.dll bug to me. I see consistently the traceback either terminates in strdup() called from mmap64(), or mktime() called from strdup(). There are a number of hacks you can do to work around the bug. i..e.: void *malloc_wrapper(size_t t) { static const size_t reserved_size=32768; static void *reserved=NULL; void *retval=NULL; printf("reserved=%x,%x\n",reserved,t+reserved_size); if(reserved != NULL) { free(reserved); } reserved = malloc(t+reserved_size); unsigned int w=(unsigned int)reserved; if(!(0xff800000&(unsigned int)reserved)) { free(reserved); } else if(reserved != NULL) { free(reserved); retval=malloc(t); } reserved=malloc(reserved_size); return retval; } However, none are really satifactory. Bill ----- Original Message ----- From: "Juergen Bohn" To: Sent: Tuesday, September 02, 2003 9:35 AM Subject: malloc segfaults > Tested with cygwin1.dll 1.5.3-1 and 1.3.22-1 on Win2000-SP4, malloc() does > not (always) > return NULL if there is no more memory available. Try, for example, simple > loops like: > > x = malloc(10000); > for (i=0; x != NULL; i++) > { > x = malloc(10000); > if (x == NULL) printf("x is NULL\n"); > } > > My application terminates with a segmentation violation, but all attempts > to handle this by signal() or atexit() fail. Unfortunately, also sysconf() > does not work to get the number of available pages (_SC_AVPHYS_PAGES, I get > always the same but wrong value). > > While testing, I detected that errno is set to 12 ("Not enough memory") > after enough iterations through the for-loop above, while variable x still > is not zero. But still my application crashes even when I break the loop > at errno!=0. > > Is there any secure way to find out, how much memory is available (or hope > that the malloc() problems will be solved)? > > Many thanks, > Juergen > > > > -- > Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple > Problem reports: http://cygwin.com/problems.html > Documentation: http://cygwin.com/docs.html > FAQ: http://cygwin.com/faq/ > -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/