Author: Remi Meier
Branch: c7-refactor
Changeset: r768:775ad832acb8
Date: 2014-02-18 15:53 +0100
http://bitbucket.org/pypy/stmgc/changeset/775ad832acb8/

Log:    fix for contention_management calling cond_wait in tests

diff --git a/c7/stm/contention.c b/c7/stm/contention.c
--- a/c7/stm/contention.c
+++ b/c7/stm/contention.c
@@ -37,6 +37,10 @@
         abort_with_mutex();
     }
     else if (wait) {
+#ifdef STM_TESTS
+        /* abort anyway for tests. We mustn't call cond_wait() */
+        abort_with_mutex();
+#endif
         /* otherwise, we will issue a safe point and wait: */
         STM_PSEGMENT->safe_point = SP_SAFE_POINT_CANNOT_COLLECT;
 
diff --git a/c7/test/test_random.py b/c7/test/test_random.py
--- a/c7/test/test_random.py
+++ b/c7/test/test_random.py
@@ -19,13 +19,18 @@
     return "lp%d" % _root_numbering
 
 _global_time = 0
-def contention_management(first_trs, second_trs):
-    if first_trs.must_abort or second_trs.must_abort:
-        return
-    if first_trs.start_time < second_trs.start_time:
-        second_trs.must_abort = True
+def contention_management(our_trs, other_trs, wait=False):
+    if other_trs.start_time < our_trs.start_time:
+        pass
     else:
-        first_trs.must_abort = True
+        other_trs.must_abort = True
+        
+    if not other_trs.must_abort:
+        our_trs.must_abort = True
+    elif wait:
+        # abort anyway:
+        our_trs.must_abort = True
+        
 
 class TransactionState(object):
     """maintains read/write sets"""
@@ -168,7 +173,7 @@
                 continue
             
             if other_trs.write_set & tr_state.write_set:
-                contention_management(tr_state, other_trs)
+                contention_management(tr_state, other_trs, True)
 
     def check_for_write_read_conflicts(self, tr_state):
         for ts in self.thread_states:
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to