[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