[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Fwd: Guile licensing, also R6RS/ERR5RS
From: |
dma05 |
Subject: |
Re: Fwd: Guile licensing, also R6RS/ERR5RS |
Date: |
Mon, 04 Feb 2008 02:00:14 +0100 |
Hey there,
I'm Magnus, Leonardo forwarded this mail 'ere to me so i could answer a bit
more directly ;).
> From: "Leonardo Valeri Manera" <address@hidden>
> Date: 04.02.08 01:39:28
> To: Magnus <address@hidden>
> Subject: Fwd: Guile licensing, also R6RS/ERR5RS
>
> ---------- Forwarded message ----------
> From: Neil Jerram <address@hidden>
> Date: 4 Feb 2008 00:31
> Subject: Re: Guile licensing, also R6RS/ERR5RS
> To: Leonardo Valeri Manera <address@hidden>
> Cc: address@hidden
>
>
> "Leonardo Valeri Manera" <address@hidden> writes:
>
> > magnus gave me this backtrace
> >
> > "<jyujin> it's always in precisely this location:
> > /lib/libguile.so.17(scm_mark_locations+0x17)[0x2aaaae6192b7]"
>
> Thanks, Leonardo. Could you also say what version of Guile you're
> using, and provide or point us to the code needed to reproduce this?
>
> Regards,
> Neil
>
I was using guile 1.8.3, and the issue seems to be related to creating lots of
threads, using guile inside of them and then having the threads terminate. This
code here will still occasinally crash:
http://git.einit.org/?p=einit/core.git;a=blob;f=src/modules/module-scheme-guile.c;h=bc0b19449dd7ca3141e9a16b275ca71092370f55;hb=d20bf040f53a5669be7afc9edeffd92d4f2b2919
The original version spawned a new thread for each incoming event, and that
crashed reliably about every 1k or so events. I tried to look into the bug a
bit, and it seems like libguile tries to read the stack of all the threads
(well, probably only those that used guile), and whenever a thread dies at an
inconvenient time while the gc is running, things get all segfaulty. The
condition is fairly rare now though. It /might/, however, also be an issue with
gcc's pthreads. The box that i first found this issue on was running an amd64
version of GNU/Linux, and this code never crashed on Darwin/ppc.
Something else that might be important (i wouldn't know): einit isn't linking
to libguile directly, the code i linked to above is compiled into its own .so
file, which in turn is linked against libguile, then einit only calls dlopen()
on the resulting .so file.
Greetings,
Magnus Deininger
_____________________________________________________________________
Der WEB.DE SmartSurfer hilft bis zu 70% Ihrer Onlinekosten zu sparen!
http://smartsurfer.web.de/?mc=100071&distributionid=000000000066