[gclist] Boehm's collector and "dynamic roots"
Fergus Henderson
fjh@cs.mu.oz.au
Thu, 1 Mar 2001 17:32:07 +1100
On 01-Mar-2001, Ji-Yong D. Chung <virtualcyber@erols.com> wrote:
> I am wondering if there is any way to cause
> the collector to scan only to the top of MY OWN
> stack, rather than the whole 200k.
>
> For this, it seems that I need to implement
> additional interfaces that could add
> what one may call "dynamic" roots -- roots
> whose size will change when I push
> my stack.
>
> Has anyone encountered a similar problem
> before, and know of a relatively simple solution
> to this problem?
Use the GC_push_other_roots() hook, which is declared in gc_priv.h:
extern void (*GC_push_other_roots)();
/* Push system or application specific roots */
/* onto the mark stack. In some environments */
/* (e.g. threads environments) this is */
/* predfined to be non-zero. A client supplied */
/* replacement should also call the original */
/* function. */
This will get called whenever a collection occurs.
In your function, you can call GC_push_all() or GC_push_all_stack()
to register your stack.
--
Fergus Henderson <fjh@cs.mu.oz.au> | "I have always known that the pursuit
| of excellence is a lethal habit"
WWW: <http://www.cs.mu.oz.au/~fjh> | -- the last words of T. S. Garp.