X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FCapability.h;h=0f61fad913ede2a688806f44efc522701397a3b7;hb=1c45176f3b9be75b5c4744d9ef074430bf034e3f;hp=77132e318ea57891833f19161fbf09fdb66148b6;hpb=6a405b1efd138a4af4ed93ce4ff173a4c5704512;p=ghc-hetmet.git diff --git a/rts/Capability.h b/rts/Capability.h index 77132e3..0f61fad 100644 --- a/rts/Capability.h +++ b/rts/Capability.h @@ -276,6 +276,7 @@ extern void grabCapability (Capability **pCap); // cause all capabilities to context switch as soon as possible. void setContextSwitches(void); +INLINE_HEADER void contextSwitchCapability(Capability *cap); // Free all capabilities void freeCapabilities (void); @@ -322,4 +323,16 @@ discardSparksCap (Capability *cap) { return discardSparks(cap->sparks); } #endif +INLINE_HEADER void +contextSwitchCapability (Capability *cap) +{ + // setting HpLim to NULL ensures that the next heap check will + // fail, and the thread will return to the scheduler. + cap->r.rHpLim = NULL; + // But just in case it didn't work (the target thread might be + // modifying HpLim at the same time), we set the end-of-block + // context-switch flag too: + cap->context_switch = 1; +} + #endif /* CAPABILITY_H */