>>>>> "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