#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
// 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
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;
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;
cap->context_switch = 1;
}
+END_RTS_PRIVATE
+
#endif /* CAPABILITY_H */