projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix names of coercions in newtype instances
[ghc-hetmet.git]
/
rts
/
RaiseAsync.c
diff --git
a/rts/RaiseAsync.c
b/rts/RaiseAsync.c
index
3b97b9c
..
d892e95
100644
(file)
--- a/
rts/RaiseAsync.c
+++ b/
rts/RaiseAsync.c
@@
-13,7
+13,6
@@
#include "RaiseAsync.h"
#include "SMP.h"
#include "Schedule.h"
#include "RaiseAsync.h"
#include "SMP.h"
#include "Schedule.h"
-#include "Storage.h"
#include "LdvProfile.h"
#include "Updates.h"
#include "STM.h"
#include "LdvProfile.h"
#include "Updates.h"
#include "STM.h"
@@
-497,9
+496,11
@@
throwToReleaseTarget (void *tso)
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).
+
+ Returns: non-zero if an exception was raised, zero otherwise.
-------------------------------------------------------------------------- */
-------------------------------------------------------------------------- */
-void
+int
maybePerformBlockedException (Capability *cap, StgTSO *tso)
{
StgTSO *source;
maybePerformBlockedException (Capability *cap, StgTSO *tso)
{
StgTSO *source;
@@
-515,7
+516,7
@@
maybePerformBlockedException (Capability *cap, StgTSO *tso)
// locked it.
if (tso->blocked_exceptions == END_TSO_QUEUE) {
unlockTSO(tso);
// locked it.
if (tso->blocked_exceptions == END_TSO_QUEUE) {
unlockTSO(tso);
- return;
+ return 0;
}
// We unblock just the first thread on the queue, and perform
}
// We unblock just the first thread on the queue, and perform
@@
-525,7
+526,9
@@
maybePerformBlockedException (Capability *cap, StgTSO *tso)
tso->blocked_exceptions = unblockOne_(cap, source,
rtsFalse/*no migrate*/);
unlockTSO(tso);
tso->blocked_exceptions = unblockOne_(cap, source,
rtsFalse/*no migrate*/);
unlockTSO(tso);
+ return 1;
}
}
+ return 0;
}
void
}
void
@@
-1020,6
+1023,7
@@
raiseAsync(Capability *cap, StgTSO *tso, StgClosure *exception,
StgTRecHeader *trec = tso -> trec;
StgTRecHeader *outer = stmGetEnclosingTRec(trec);
stmAbortTransaction(cap, trec);
StgTRecHeader *trec = tso -> trec;
StgTRecHeader *outer = stmGetEnclosingTRec(trec);
stmAbortTransaction(cap, trec);
+ stmFreeAbortedTRec(cap, trec);
tso -> trec = outer;
break;
tso -> trec = outer;
break;