On Mon, Aug 22, 2016 at 08:37:30PM +0200, Otto Moerbeek wrote:
> On Mon, Aug 22, 2016 at 07:35:49PM +0200, Otto Moerbeek wrote:
>
> > On Mon, Aug 22, 2016 at 07:07:21PM +0200, Gregor Best wrote:
> >
> > > On Mon, Aug 22, 2016 at 05:03:34PM +0200, Otto Moerbeek wrote:
> > > > On Mon, Aug 22, 2016 at 05:00:12PM +0200, Otto Moerbeek wrote:
> > > >
> > > > > Hmm, indeed, looking into it.
> > > >
> > > > Fixed diff now online,
> > > > [...]
> > >
> > > With that one, Firefox and Chromium work fine. There's a problem with
> > > Gimp though:
> > >
> > > $ gimp
> > > gimp(51103) in free(): error: bogus pointer (double free?) 0x127da3e84400
> > > gimp(51103) in malloc(): error: recursive call
> > > GLib (gthread-posix.c): Unexpected error from C library during 'malloc':
> > > Resource deadlock avoided. Aborting.
> > >
> > > This doesn't happen when starting Gimp for the first time, so the
> > > process to reproduce it (on my machine at least) is:
> > >
> > > - install gimp
> > > - move ~/.gimp-2.8 out of the way if it exists to make sure it's a clean
> > > start
> > > - launch gimp
> > > - (gimp works fine now)
> > > - close gimp, start it again
> > > - the above error message appears during startup while starting the
> > > extension "extension-script-fu" and gimp doesn't continue starting
> > >
> > > How can I debug this further? At first glance, I don't really see a way
> > > for malloc to be called recursively :/
> >
> > most likely an SIGABRT signal handler is involved.
>
> indeed, attaching gdb shows that.
>
> The problem is in a race wrt the setting of __isthreaded.
>
> Changing the __isthreaded test in ofree() to TRUE fixed this for me.
>
> More later, have to do some other things first.
>
> -Otto
>
After a forkl of a threaded program __isthreaded is reset, but
existing allocations are spread around the pools. But the new single
threaded child only looks in the first pool. I have to think how to
solve this.
-Otto