On Mon, 07 Apr 2003 21:38, Tony Garnock-Jones wrote:
Wow. For me, that's a big ask - the GTK+ stuff was locking up on the
final GC before exit...
I can get it to happen almost immediately. I've got gdb going now so I'll dig
into it when I get a chance. From a casual inspection with gdb it looks like
saved_stack_limit and C_stack_limit are being set to very similar values
(sometimes equal) which is causing the infinite loop when C_stack_probe is
checked in the C code of functions. This causes C_save_and_reclaim to be
called.
From the looks of things C_stack_limit is supposed to be set to some value to
cause a collection when C_raise_interrupt is called (because it's the
collection that results in the interrupt being handled). The old value is
saved in saved_stack_limit to restore later.
When handle_interrupt is run, then C_stack_limit is restored to
saved_stack_limit. If these values are the same or sufficiently similar then
an inifinte loop of collections results.
How to find out how they get that way is the problem...