> On 23 May 2018, at 18:58, David Kastrup <d...@gnu.org> wrote: > > Hans Åberg <haber...@telia.com> writes: > >>> On 23 May 2018, at 18:36, David Kastrup <d...@gnu.org> wrote: >>> >>> Hans Åberg <haber...@telia.com> writes: >>> >>>>> On 23 May 2018, at 18:12, David Kastrup <d...@gnu.org> wrote: >>>>> >>>>> Hans Åberg <haber...@telia.com> writes: >>>>> >>>>>> I ended up using GC_malloc_uncollectable, because it turned out too >>>>>> tricky to use malloc. >>>>> >>>>> This is C++, so we basically end up with operator ::new and operator >>>>> ::delete unless overriden by individual classes. They use >>>> >>>> This what they suggest for the Boehm GC, and it is what caused >>>> problems in my program. >>> >>> Likely because of the expectation that it would be managed by the Boehm >>> GC. The Guilev2 documentation states: >>> >>> For memory that is not associated with a Scheme object, you can >>> use ‘scm_malloc’ instead of ‘malloc’. Like ‘scm_gc_malloc’, it will >>> either return a valid pointer or signal an error. However, it will >>> not assume that the new memory block can be freed by a garbage >>> collection. The memory must be explicitly freed with ‘free’. >>> >>> So memory allocated with the standard allocator in a Guile application >>> is not managed by the Boehm GC. >> >> The object has a container with GC objects, so using using standard >> allocation for the container causes the GC to not trace the objects in >> the container, and will thus collect them. > > If you bothered looking at the LilyPond code base, you'll find that _no_ > STL containers are created containing SCM objects in the expectation > that they will automagically marked for garbage collection. Any STL > container containing SCM objects is either locally used for existing SCM > objects protected elsewhere, or its containing object is SCM controlled > and uses mark hooks for marking the elements of the STL container during > garbage collection scans. There are even mechanisms for making sure > that the STL containers are fully initialized before a derived class may > have its mark hook triggered.
But scm_malloc does not use GC_malloc_uncollectable, it seems, so it too would require explicit markups in order to get internally in Guile. _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel