malloc crash

Takashi Yano takashi.yano@nifty.ne.jp
Tue Oct 26 00:18:55 GMT 2021


On Mon, 25 Oct 2021 16:36:50 -0700
Mark Geisert wrote:
> Ken Brown wrote:
> > On 10/25/2021 5:29 PM, Mark Geisert wrote:
> >> Corinna Vinschen wrote:
> >>> On Oct 25 08:35, Ken Brown wrote:
> >>>> On 10/25/2021 4:59 AM, Corinna Vinschen wrote:
> >>>>> Has the thread already been started at this point?
> >>>>
> >>>> Yes, here's the backtrace of that thread:
> >>>>
> >>>> Thread 5 (Thread 9692.0x7c4c):
> >>>> #0  0x00000001801934f9 in sys_alloc (m=0x18036f860 <_gm_>, nb=1040) at
> >>>> ../../../../temp/winsup/cygwin/malloc.cc:4232
> >>>> #1  0x0000000180196b96 in dlmalloc (bytes=1024) at
> >>>> ../../../../temp/winsup/cygwin/malloc.cc:4669
> >>>> #2  0x00000001801993e1 in dlrealloc (oldmem=0x0, bytes=1024) at
> >>>> ../../../../temp/winsup/cygwin/malloc.cc:5187
> >>>> #3  0x00000001800e8eed in realloc (p=0x0, size=1024) at
> >>>> ../../../../temp/winsup/cygwin/malloc_wrapper.cc:73
> >>>
> >>> Er... huh?  So both threads are in a malloc function?  This shouldn't
> >>> have happened, given the clunky muto guarding malloc calls.  This is
> >>> really strange.  Why's the muto not working here?
> >>
> >> Is it possible both threads have executed malloc_init()?
> >> If so, the second one would reinit the muto.
> > 
> > Or does the fifo_reader thread call a malloc function before the main thread has 
> > called malloc_init()?  This would presumably cause __malloc_lock() to fail, but 
> > there's no error check.
> 
> If there's a global constructor involved, that is known to happen.  Constructors 
> are run from dll_crt0_0(), before malloc_init() is called from dll_crt0_1().  See 
> dcrt0.cc for the details.

So how about moving malloc_init() call from dll_crt0_1() to dll_crl0_0()
so that malloc() can be called in fixup_after_fork/exec()?

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


More information about the Cygwin-developers mailing list