X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FCapability.h;h=4b515485644ad8b2c49e0fe8ac51406933e7a9a6;hb=0c658578d609f93a25a8dff97b5cead055b246e3;hp=fb199e2a3e32882d2a57f18b4e7f4eaa37eec3a2;hpb=a2a67cd520b9841114d69a87a423dabcb3b4368e;p=ghc-hetmet.git diff --git a/rts/Capability.h b/rts/Capability.h index fb199e2..4b51548 100644 --- a/rts/Capability.h +++ b/rts/Capability.h @@ -22,6 +22,8 @@ #include "Task.h" #include "Sparks.h" +BEGIN_RTS_PRIVATE + struct Capability_ { // State required by the STG virtual machine when running Haskell // code. During STG execution, the BaseReg register always points @@ -41,9 +43,6 @@ struct Capability_ { // catching unsafe call-ins. rtsBool in_haskell; - // true if this Capability is currently in the GC - rtsBool in_gc; - // The run queue. The Task owning this Capability has exclusive // access to its run queue, so can wake up threads without // taking a lock, and the common path through the scheduler is @@ -67,6 +66,9 @@ struct Capability_ { bdescr **mut_lists; bdescr **saved_mut_lists; // tmp use during GC + // block for allocating pinned objects into + bdescr *pinned_object_block; + // Context switch flag. We used to have one global flag, now one // per capability. Locks required : none (conflicts are harmless) int context_switch; @@ -292,7 +294,8 @@ recordMutableCap (StgClosure *p, Capability *cap, nat gen) bdescr *bd; // We must own this Capability in order to modify its mutable list. - ASSERT(cap->running_task == myTask()); + // ASSERT(cap->running_task == myTask()); + // NO: assertion is violated by performPendingThrowTos() bd = cap->mut_lists[gen]; if (bd->free >= bd->start + BLOCK_SIZE_W) { bdescr *new_bd; @@ -330,4 +333,6 @@ contextSwitchCapability (Capability *cap) cap->context_switch = 1; } +END_RTS_PRIVATE + #endif /* CAPABILITY_H */