>>>>> "A" == =?iso-8859-1?Q?Aleksi Niemel=E4?= <iso-8859-1> writes:

A> Perhaps you're not wrong,

 Yes I'm wrong if you look at 1.4.5 :

void
rb_gc()
{
    struct gc_list *list;
    struct FRAME * volatile frame; /* gcc 2.7.2.3 -O2 bug??  */
    jmp_buf save_regs_gc_mark;
#ifdef C_ALLOCA
    VALUE stack_end;
    alloca(0);
# define STACK_END (&stack_end)
#else
    VALUE *stack_end = alloca(1);
# define STACK_END (stack_end)
#endif

    alloc_objects = 0;
    malloc_memories = 0;

    if (during_gc) return;
    during_gc++;

    /* mark frame stack */
 

 but I was looking at the source of 1.5.* where you need to enable the GC
 before a call to rb_gc()

void
rb_gc()
{
    struct gc_list *list;
    struct FRAME * volatile frame; /* gcc 2.7.2.3 -O2 bug??  */
    jmp_buf save_regs_gc_mark;
#ifdef C_ALLOCA
    VALUE stack_end;
    alloca(0);
# define STACK_END (&stack_end)
#else
    VALUE *stack_end = alloca(1);
# define STACK_END (stack_end)
#endif

    if (dont_gc || during_gc || rb_prohibit_interrupt || ruby_in_compile) {
	if (!freelist || malloc_memories > GC_MALLOC_LIMIT) {
	    malloc_memories = 0;
	    add_heap();
	}
	return;
    }



Guy Decoux