#include "Task.h"
#include "Sparks.h"
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
struct Capability_ {
// State required by the STG virtual machine when running Haskell
// 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
// the suspended TSOs easily. Hence, when migrating a Task from
// the returning_tasks list, we must also migrate its entry from
// this list.
- Task *suspended_ccalling_tasks;
+ InCall *suspended_ccalls;
// One mutable list per generation, so we don't need to take any
// locks when updating an old-generation thunk. This also lets us
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;
}
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* CAPABILITY_H */