STM fix from Tim Harris
authorSimon Marlow <simonmar@microsoft.com>
Fri, 10 Feb 2006 11:21:11 +0000 (11:21 +0000)
committerSimon Marlow <simonmar@microsoft.com>
Fri, 10 Feb 2006 11:21:11 +0000 (11:21 +0000)
Fixes assertion failures with STM and -debug.  Tim says:
Sorry, it's a problem in how nested transactions are handled in
non-SMP builds.  It'll bite when trying to commit a nested transaction
which has read from a TVar but not updated it.

The call to validate_and_acquire_ownership in
stmCommitNestedTransaction should be the same as that in
stmCommitNestedTransaction, i.e.:

  result = validate_and_acquire_ownership(trec, (!use_read_phase), TRUE);

ghc/rts/STM.c

index f94cf15..d3283a9 100644 (file)
@@ -999,7 +999,7 @@ StgBool stmCommitNestedTransaction(Capability *cap, StgTRecHeader *trec) {
   lock_stm(trec);
 
   et = trec -> enclosing_trec;
-  result = validate_and_acquire_ownership(trec, FALSE, TRUE);
+  result = validate_and_acquire_ownership(trec, (!use_read_phase), TRUE);
   if (result) {
     // We now know that all the updated locations hold their expected values.