malloc crash

Takashi Yano takashi.yano@nifty.ne.jp
Tue Oct 26 09:26:39 GMT 2021


On Tue, 26 Oct 2021 01:59:36 -0700
Mark Geisert wrote:
> Takashi Yano wrote:
> > On Tue, 26 Oct 2021 01:30:13 -0700
> > Mark Geisert wrote:
> >> Apologies; this was many months ago.  What I did try was moving the malloc_init()
> >> to before running the constructor chain, as Takashi suggested.  That is what gave
> >> me more problems.  I don't recall what they were, but I reverted that attempt.
> >>
> >> The "future malloc" build of Cygwin I'm running doesn't exhibit Ken's issue, as
> >> far as I can tell.  It has a specific fix to avoid the scenario I've been talking
> >> about here, but I don't want to take us down that path unless we're sure Ken's
> >> hitting that same scenario.
> > 
> > I tried the following patch, and confirmed that the issue has
> > been disappeared. I do not notice any other problems so far
> > with this patch.
> > 
> > diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc
> > index 6f4723bb0..0d541ec14 100644
> > --- a/winsup/cygwin/dcrt0.cc
> > +++ b/winsup/cygwin/dcrt0.cc
> > @@ -773,6 +773,10 @@ dll_crt0_0 ()
> >     do_global_ctors (&__CTOR_LIST__, 1);
> 
>        ^^^^^^^^^^^^^^^
> 
> >     cygthread::init ();
> >   
> > +  /* malloc_init() has been moved from dll_crt0_1() to here so that
> > +     malloc() can be called in fixup_after_exec(). */
> > +  malloc_init ();
> > +
> >     if (!child_proc_info)
> >       {
> >         setup_cygheap ();
> > @@ -857,7 +861,7 @@ dll_crt0_1 (void *)
> >        on a functioning malloc and it's possible that the user's program may
> >        have overridden malloc.  We only know about that at this stage,
> >        unfortunately. */
> > -  malloc_init ();
> > +  /* malloc_init() has been moved to dll_crt0_0(). */
> >     user_shared->initialize ();
> >   
> >   #ifdef CYGHEAP_DEBUG
> > 
> > 
> > Where is the "constructor chain" you mentioned?
> 
> See above.  Try moving your new lines above the call to do_global_ctors().  Also 
> note the comment just above the original location of those lines.. you're now 
> ignoring what the comment warns about.

I have just tried moving malloc_init() before do_global_ctors(),
however, I do not encountered any problems.

I do not understand what "user's program may have overridden malloc"
means...

-- 
Takashi Yano <takashi.yano@nifty.ne.jp>


More information about the Cygwin-developers mailing list