extern (C) void* rt_stackBottom();
extern (C) void* rt_stackTop();
- extern (C) void* rt_staticDataBottom();
- extern (C) void* rt_staticDataTop();
extern (C) void rt_finalize( void* p, bool det = true );
- alias void delegate( void*, void* ) scanFn;
-
- extern (C) void rt_scanStaticData( scanFn scan );
-
version (MULTI_THREADED)
{
extern (C) bool thread_needLock();
extern (C) void thread_suspendAll();
extern (C) void thread_resumeAll();
+ alias void delegate( void*, void* ) scanFn;
extern (C) void thread_scanAll( scanFn fn, void* curStackTop = null );
}
}
- static void scanStaticData(gc_t g)
- {
- //debug(PRINTF) printf("+GC.scanStaticData()\n");
- auto pbot = rt_staticDataBottom();
- auto ptop = rt_staticDataTop();
- g.addRange(pbot, ptop - pbot);
- //debug(PRINTF) printf("-GC.scanStaticData()\n");
- }
-
- static void unscanStaticData(gc_t g)
- {
- auto pbot = rt_staticDataBottom();
- g.removeRange(pbot);
- }
-
/**
* add p to list of roots
*/
pool.mark.copy(&pool.freebits);
}
- rt_scanStaticData( &mark );
-
version (MULTI_THREADED)
{
if (!noStack)