projects
/
ghc-hetmet.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
42222f9
)
Strip tag bits from closure pointers before trying to deference them.
author
Ben.Lippmeier@anu.edu.au
<unknown>
Tue, 24 Feb 2009 10:13:46 +0000
(10:13 +0000)
committer
Ben.Lippmeier@anu.edu.au
<unknown>
Tue, 24 Feb 2009 10:13:46 +0000
(10:13 +0000)
rts/STM.c
patch
|
blob
|
history
diff --git
a/rts/STM.c
b/rts/STM.c
index
9d93972
..
b9be955
100644
(file)
--- a/
rts/STM.c
+++ b/
rts/STM.c
@@
-306,7
+306,7
@@
static StgClosure *lock_tvar(StgTRecHeader *trec,
do {
do {
result = s -> current_value;
do {
do {
result = s -> current_value;
- } while (GET_INFO(result) == &stg_TREC_HEADER_info);
+ } while (GET_INFO(UNTAG_CLOSURE(result)) == &stg_TREC_HEADER_info);
} while (cas((void *)&(s -> current_value),
(StgWord)result, (StgWord)trec) != (StgWord)result);
return result;
} while (cas((void *)&(s -> current_value),
(StgWord)result, (StgWord)trec) != (StgWord)result);
return result;
@@
-1573,7
+1573,7
@@
static StgClosure *read_current_value(StgTRecHeader *trec STG_UNUSED, StgTVar *t
result = tvar -> current_value;
#if defined(STM_FG_LOCKS)
result = tvar -> current_value;
#if defined(STM_FG_LOCKS)
- while (GET_INFO(result) == &stg_TREC_HEADER_info) {
+ while (GET_INFO(UNTAG_CLOSURE(result)) == &stg_TREC_HEADER_info) {
TRACE("%p : read_current_value(%p) saw %p", trec, tvar, result);
result = tvar -> current_value;
}
TRACE("%p : read_current_value(%p) saw %p", trec, tvar, result);
result = tvar -> current_value;
}