X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=rts%2Fsm%2FGCThread.h;h=d6af2b157129367d3cc8800a981f26a523285740;hb=e6243a818496aad82b6f47511d3bd9bc800f747d;hp=d4376f77a7b27f27b372b0ad0af2ac9bc94a345b;hpb=bb0fe6ce59a2adb62e4bb2f66f5be0213cb0e55f;p=ghc-hetmet.git diff --git a/rts/sm/GCThread.h b/rts/sm/GCThread.h index d4376f7..d6af2b1 100644 --- a/rts/sm/GCThread.h +++ b/rts/sm/GCThread.h @@ -113,10 +113,9 @@ 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; + SpinLock gc_spin; + SpinLock mut_spin; + volatile rtsBool wakeup; #endif nat thread_index; // a zero based index identifying the thread @@ -196,7 +195,9 @@ extern gc_thread **gc_threads; #define GLOBAL_REG_DECL(type,name,reg) register type name REG(reg); -#if defined(REG_Base) +#if defined(REG_Base) && !defined(i386_HOST_ARCH) +// on i386, REG_Base is %ebx which is also used for PIC, so we don't +// want to steal it GLOBAL_REG_DECL(gc_thread*, gct, REG_Base) #define DECLARE_GCT /* nothing */