[pypy-commit] stmgc default: add some very simple commit-log testing

Raemi noreply at buildbot.pypy.org
Fri Sep 5 16:11:38 CEST 2014


Author: Remi Meier <remi.meier at inf.ethz.ch>
Branch: 
Changeset: r1363:a5c6dc8a08d5
Date: 2014-09-05 16:12 +0200
http://bitbucket.org/pypy/stmgc/changeset/a5c6dc8a08d5/

Log:	add some very simple commit-log testing

diff --git a/c8/stm/misc.c b/c8/stm/misc.c
--- a/c8/stm/misc.c
+++ b/c8/stm/misc.c
@@ -69,4 +69,25 @@
     return (object_t *)list_item(
         STM_PSEGMENT->objects_pointing_to_nursery, index);
 }
+
+static volatile struct stm_commit_log_entry_s *_last_cl_entry;
+static long _last_cl_entry_index;
+void _stm_start_enum_last_cl_entry()
+{
+    _last_cl_entry = &commit_log_root;
+    volatile struct stm_commit_log_entry_s *cl = (volatile struct stm_commit_log_entry_s *)
+        &commit_log_root;
+
+    while ((cl = cl->next)) {
+        _last_cl_entry = cl;
+    }
+    _last_cl_entry_index = 0;
+}
+
+object_t *_stm_next_last_cl_entry()
+{
+    if (_last_cl_entry != &commit_log_root)
+        return _last_cl_entry->written[_last_cl_entry_index++];
+    return NULL;
+}
 #endif
diff --git a/c8/stmgc.h b/c8/stmgc.h
--- a/c8/stmgc.h
+++ b/c8/stmgc.h
@@ -90,6 +90,8 @@
 long _stm_count_objects_pointing_to_nursery(void);
 object_t *_stm_enum_modified_old_objects(long index);
 object_t *_stm_enum_objects_pointing_to_nursery(long index);
+object_t *_stm_next_last_cl_entry();
+void _stm_start_enum_last_cl_entry();
 #endif
 
 /* ==================== HELPERS ==================== */
diff --git a/c8/test/support.py b/c8/test/support.py
--- a/c8/test/support.py
+++ b/c8/test/support.py
@@ -67,6 +67,8 @@
 long _stm_count_objects_pointing_to_nursery(void);
 object_t *_stm_enum_modified_old_objects(long index);
 object_t *_stm_enum_objects_pointing_to_nursery(long index);
+object_t *_stm_next_last_cl_entry();
+void _stm_start_enum_last_cl_entry();
 
 void *memset(void *s, int c, size_t n);
 
@@ -373,6 +375,14 @@
         return None
     return map(lib._stm_enum_old_objects_with_cards, range(count))
 
+def last_commit_log_entries():
+    lib._stm_start_enum_last_cl_entry()
+    res = []
+    obj = lib._stm_next_last_cl_entry()
+    while obj != ffi.NULL:
+        res.append(obj)
+        obj = lib._stm_next_last_cl_entry()
+    return res
 
 
 
diff --git a/c8/test/test_basic.py b/c8/test/test_basic.py
--- a/c8/test/test_basic.py
+++ b/c8/test/test_basic.py
@@ -33,9 +33,12 @@
         self.switch(1)
         self.start_transaction()
         self.commit_transaction()
+        assert last_commit_log_entries() == []
+
         self.switch(0)
 
         self.commit_transaction()
+        assert last_commit_log_entries() == []
 
     def test_simple_read(self):
         self.start_transaction()
@@ -43,6 +46,7 @@
         stm_read(lp1)
         assert stm_was_read(lp1)
         self.commit_transaction()
+        assert last_commit_log_entries() == []
 
     def test_simple_write(self):
         self.start_transaction()
@@ -53,6 +57,7 @@
         assert modified_old_objects() == []             # object not old
         assert objects_pointing_to_nursery() == []    # short transaction
         self.commit_transaction()
+        assert last_commit_log_entries() == []
 
     def test_allocate_old(self):
         lp1 = stm_allocate_old(16)
@@ -101,6 +106,7 @@
         #
         self.switch(1)
         self.commit_transaction()
+        assert last_commit_log_entries() == [lp1]
         #
         py.test.raises(Conflict, self.switch, 0) # detects rw conflict
 
@@ -123,6 +129,7 @@
         assert (p2 - p1) % 4096 == 0
         assert stm_get_char(lp) == 'u'
         self.commit_transaction()
+        assert last_commit_log_entries() == [lp]
 
     def test_commit_fresh_objects2(self):
         self.switch(1)


More information about the pypy-commit mailing list