On Fri 17 Feb 2012 03:46, Mike Gran <spk...@yahoo.com> writes:

>> From: Andy Wingo <wi...@pobox.com>
>
>>>  Can you explain what happens here?  Is it a deadlock?  What’s at
>>>  ports.c:575?
>> 
>> It was a deadlock, but I fixed it.  It was something that locked all
>> weak sets, but while doing so allocated memory.  Allocating memory ran
>> finalizers which tried to manipulate the port set, but that lock was
>> already taken: deadlock.
>> 
>> The solution will be to run finalizers in a separate thread, as the JVM
>> does.
>
> As an aside, I can get a similar sort of deadlock during garbage
> collection of SMOBs if my smob_free function calls a scheme function.
> But the manual does note that you should not call any functions in 
> SMOB GC finalizers, so that wouldn't happen if I actually followed the
> instructions.

Any Scheme function?  With Guile 2.0?  It should be possible to call
arbitrary code from finalizers, if we call finalizers from a separate
thread.

Andy
-- 
http://wingolog.org/

Reply via email to