This is the mail archive of the
cygwin-developers
mailing list for the Cygwin project.
Re: pthread::atforkchild()
- From: Corinna Vinschen <corinna-cygwin at cygwin dot com>
- To: cygwin-developers at cygwin dot com
- Date: Tue, 7 Mar 2006 15:33:12 +0100
- Subject: Re: pthread::atforkchild()
- References: <05ec01c641ea$8fe91e10$a501a8c0@CAM.ARTIMI.COM>
- Reply-to: cygwin-developers at cygwin dot com
On Mar 7 13:25, Dave Korn wrote:
>
>
> I see it calls a list of callback functions:
>
> ----------------------------------<snip>----------------------------------
> void
> pthread::atforkchild ()
> {
> MT_INTERFACE->fixup_after_fork ();
>
> __fp_unlock_all ();
>
> callback *cb = MT_INTERFACE->pthread_child;
> while (cb)
> {
> cb->cb ();
> cb = cb->next;
> }
> }
> ----------------------------------<snip>----------------------------------
>
> I got one of those SEGV-on-pressing-ctrl-C bugs, and fortunately error_start
> jumped in and grabbed it. The backtrace is slightly obfuscated by the
> frameless function call to pthread::atforkchild() in between frok::child and
> (some random address in the data segment of) cygiconv-2.
>
> ----------------------------------<snip>----------------------------------
> (gdb) bt
> #0 0x0061bab1 in riscos1_wctomb () from /usr/bin/cygiconv-2.dll
> #1 0x61051ff0 in frok::child (this=0x22eb70)
> at /usr/build/src-winsup/winsup/cygwin/fork.cc:176
> #2 0x61052d43 in fork () at /usr/build/src-winsup/winsup/cygwin/fork.cc:528
> #3 0x6109b89f in _sigfe ()
> at /usr/build/src-winsup/winsup/cygwin/cygtls.h:232
> #4 0x0022ed18 in ?? ()
> #5 0x6105db5a in malloc (size=4220284)
> at /usr/build/src-winsup/winsup/cygwin/malloc_wrapper.cc:72
> #6 0x100103f0 in ?? ()
> #7 0x00000001 in ?? ()
> #8 0x00000000 in ?? () from
> (gdb)
> ----------------------------------<snip>----------------------------------
>
> Looking at the thread data, it appears well formed, but the callback address
> in the cb member of the one and only entry on the pthread_child list is
> plainly wrong.
>
> ----------------------------------<snip>----------------------------------
> [...]
> (gdb) print *__cygwin_user_data->threadinterface->pthread_child
> $5 = {cb = 0x61bab0 <riscos1_wctomb+70640>, next = 0x0}
It certainly looks like a valid address. Do you know which callbacks
are installed by the application? You could also add some debug_printfs
to see which values are to be expected in the normal case.
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Project Co-Leader cygwin AT cygwin DOT com
Red Hat