X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fsm%2FGC.h;h=d45efb96e495c0127269837da3fcbf4ccfd558b0;hb=c357244371ca5eeaa0d56a6bd349e26a3b16b7dc;hp=69fdc10447cd1da5bbe82847fba76cc7ce7aa0d0;hpb=d5bd3e829c47c03157cf41cad581d2df44dfd81b;p=ghc-hetmet.git diff --git a/rts/sm/GC.h b/rts/sm/GC.h index 69fdc10..d45efb9 100644 --- a/rts/sm/GC.h +++ b/rts/sm/GC.h @@ -110,6 +110,10 @@ typedef struct step_workspace_ { typedef struct gc_thread_ { #ifdef THREADED_RTS OSThreadId id; // The OS thread that this struct belongs to + Mutex wake_mutex; + Condition wake_cond; // So we can go to sleep between GCs + rtsBool wakeup; + rtsBool exit; #endif nat thread_index; // a zero based index identifying the thread @@ -124,7 +128,7 @@ typedef struct gc_thread_ { // -------------------- // evacuate flags - nat evac_gen; // Youngest generation that objects + step *evac_step; // Youngest generation that objects // should be evacuated to in // evacuate(). (Logically an // argument to evacuate, but it's @@ -148,7 +152,8 @@ extern nat N; extern rtsBool major_gc; extern gc_thread *gc_threads; -extern gc_thread *gct; // this thread's gct TODO: make thread-local +register gc_thread *gct __asm__("%rbx"); +// extern gc_thread *gct; // this thread's gct TODO: make thread-local extern StgClosure* static_objects; extern StgClosure* scavenged_static_objects; @@ -165,6 +170,10 @@ extern StgPtr oldgen_scan; extern long copied; extern long scavd_copied; +#ifdef THREADED_RTS +extern SpinLock static_objects_sync; +#endif + #ifdef DEBUG extern nat mutlist_MUTVARS, mutlist_MUTARRS, mutlist_MVARS, mutlist_OTHERS; #endif