This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: malloc segfaults


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/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]