- debugTrace(DEBUG_sched, "throwTo: from thread %d to thread %d",
- source->id, target->id);
+ debugTrace(DEBUG_sched, "throwTo: from thread %lu to thread %lu",
+ (unsigned long)source->id, (unsigned long)target->id);
target_cap = target->cap;
if (target_cap == cap && (target->flags & TSO_BLOCKEX) == 0) {
// It's on our run queue and not blocking exceptions
target_cap = target->cap;
if (target_cap == cap && (target->flags & TSO_BLOCKEX) == 0) {
// It's on our run queue and not blocking exceptions
if ((target->flags & TSO_BLOCKEX) &&
((target->flags & TSO_INTERRUPTIBLE) == 0)) {
blockedThrowTo(source,target);
if ((target->flags & TSO_BLOCKEX) &&
((target->flags & TSO_INTERRUPTIBLE) == 0)) {
blockedThrowTo(source,target);
source->link = target->blocked_exceptions;
target->blocked_exceptions = source;
dirtyTSO(target); // we modified the blocked_exceptions queue
source->block_info.tso = target;
source->link = target->blocked_exceptions;
target->blocked_exceptions = source;
dirtyTSO(target); // we modified the blocked_exceptions queue
source->block_info.tso = target;
queue, but not perform any throwTo() immediately. This might be
more appropriate when the target thread is the one actually running
(see Exception.cmm).
queue, but not perform any throwTo() immediately. This might be
more appropriate when the target thread is the one actually running
(see Exception.cmm).
// We've stripped the entire stack, the thread is now dead.
tso->what_next = ThreadKilled;
tso->sp = frame + sizeofW(StgStopFrame);
return;
// We've stripped the entire stack, the thread is now dead.
tso->what_next = ThreadKilled;
tso->sp = frame + sizeofW(StgStopFrame);
return;
// whether the transaction is valid or not because its
// possible validity cannot have caused the exception
// and will not be visible after the abort.
// whether the transaction is valid or not because its
// possible validity cannot have caused the exception
// and will not be visible after the abort.