This is the mail archive of the
cygwin@cygwin.com
mailing list for the Cygwin project.
Re: malloc segfaults
- From: "Bill C. Riemers" <cygwin at docbill dot net>
- To: "Juergen Bohn" <bohn at osc-es dot de>,<cygwin at cygwin dot com>
- Date: Tue, 2 Sep 2003 16:50:40 -0400
- Subject: Re: malloc segfaults
- References: <3F549C88.9040103@osc-es.de>
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" <bohn@osc-es.de>
To: <cygwin@cygwin.com>
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/