[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Java finalization & smobs?

From: Han-Wen Nienhuys
Subject: Java finalization & smobs?
Date: Fri, 10 Dec 2021 15:59:13 +0100

Hi Guile devs,

We are debugging a GC issue in LilyPond when used with Guile 2.2, and
could use some help.

The issue and associated Merge Request are here:

We are using smobs with custom mark and free functions for
interfacing with our C++ code. We are seeing that sometimes mark
functions are called on smobs which have their dependencies already
collected, leading to crashes.

We can change our mark routines to avoid the crash, but it's unclear
to us if this behavior is intended or not, and we worry that this will
come back to bite us in the future.

On the one hand, the docs for smobs state "must assume .. all SCM
values that it references have already been freed and are thus
invalid", which suggests that smob freeing happens in random order,
which is consistent with what we see. On the other hand, Guile sets up
BDWGC with GC_java_finalization=1, which should keep GC dependencies
of an object alive until the object itself is finalized, and I think
we have observed the mark calls that make this happen.

which of the two is it?

(I am seeing the problem on Fedora 35, with Guile 2.2.7 and libgc 8.0.4)

Han-Wen Nienhuys - -

reply via email to

[Prev in Thread] Current Thread [Next in Thread]