On Monday 09 June 2008 09:33:20 [EMAIL PROTECTED] wrote:

> Modified: branches/gsoc_pdd09/src/gc/gc_it.c
> --- branches/gsoc_pdd09/src/gc/gc_it.c  (original)
> +++ branches/gsoc_pdd09/src/gc/gc_it.c  Mon Jun  9 09:33:19 2008
> @@ -83,6 +83,7 @@
>   * 4) repeat (3) until there are no grey items in current pool/generation
>   * 5) mark all objects grey that appear in IGP lists. Repeat (1) - (4) for
> these * 6) Add all items that are still white to the free list
> + * 7) Scan through simple buffers, add white objects to free list
>   * 7) reset all flags to white
>   *
>   * Only reclaim objects where there are no greys in the current area,
> @@ -91,6 +92,51 @@
>   * back to white (which would free all objects, alive or dead).
>   */
>  
> +    if (arena_base->DOD_block_level) {
> +        return;
> +    }
> +    ++arena_base->DOD_block_level;
> +    if(flags && GC_finish_FLAG) {
> +        /* If we have a finish situation, we need to finalize all PMCs
> +           that have a custom finalization routine. We'll do this in a
> +           subroutine to reduce clutter here */
> +        gc_it_finalize_all_pmc(interp);
> +        --arena_base->DOD_block_level;
> +    }
> +
> +    Arenas * arena_base = interp->arena_base;
> +    Gc_it_data * gc_priv_data = (Gc_it_data)(arena_base->gc_private);
> +    Small_object_pool * cur_pool;  /* Current pool */
> +    Gc_it_gen * generation;        /* Current generation */
> +

Careful here; C89 forbids declarations after code.

> +    GC_trace_stack_FLAG = we need to trace the C stack and the processor
> +        registers too. I wouldn't even know how to start doing this.

See src/cpu_dep.c, specifically trace_system_areas().  If you understand that 
at anything lower than the 10,000 foot view, documentation would be lovely.

-- c

Reply via email to