[pypy-commit] stmgc c7-refactor: Passing test
arigo
noreply at buildbot.pypy.org
Mon Feb 24 16:40:17 CET 2014
Author: Armin Rigo <arigo at tunes.org>
Branch: c7-refactor
Changeset: r833:5434c22f9999
Date: 2014-02-24 16:40 +0100
http://bitbucket.org/pypy/stmgc/changeset/5434c22f9999/
Log: Passing test
diff --git a/c7/demo/demo2.c b/c7/demo/demo2.c
--- a/c7/demo/demo2.c
+++ b/c7/demo/demo2.c
@@ -164,9 +164,11 @@
stm_commit_transaction();
+ stm_start_inevitable_transaction(&stm_thread_local);
POP_ROOT(global_chained_list); /* update value */
assert(global_chained_list->value == -1);
PUSH_ROOT(global_chained_list); /* remains forever in the shadow stack */
+ stm_commit_transaction();
printf("setup ok\n");
}
diff --git a/c7/stm/misc.c b/c7/stm/misc.c
--- a/c7/stm/misc.c
+++ b/c7/stm/misc.c
@@ -13,15 +13,9 @@
return REAL_ADDRESS(STM_SEGMENT->segment_base, o);
}
-object_t *_stm_segment_address(char *ptr)
+char *_stm_get_segment_base(long index)
{
- if (ptr == NULL)
- return NULL;
-
- uintptr_t res = ptr - STM_SEGMENT->segment_base;
- assert(FIRST_OBJECT_PAGE * 4096UL <= res
- && res < NB_PAGES * 4096UL);
- return (object_t*)res;
+ return get_segment_base(index);
}
struct stm_priv_segment_info_s *_stm_segment(void)
diff --git a/c7/stmgc.h b/c7/stmgc.h
--- a/c7/stmgc.h
+++ b/c7/stmgc.h
@@ -74,7 +74,7 @@
bool _stm_in_nursery(object_t *obj);
bool _stm_in_transaction(stm_thread_local_t *tl);
char *_stm_real_address(object_t *o);
-object_t *_stm_segment_address(char *ptr);
+char *_stm_get_segment_base(long index);
void _stm_test_switch(stm_thread_local_t *tl);
object_t *_stm_allocate_old(ssize_t size_rounded_up);
void _stm_large_dump(void);
diff --git a/c7/test/support.py b/c7/test/support.py
--- a/c7/test/support.py
+++ b/c7/test/support.py
@@ -55,7 +55,7 @@
bool _stm_was_written(object_t *obj);
bool _stm_in_nursery(object_t *obj);
char *_stm_real_address(object_t *obj);
-object_t *_stm_segment_address(char *ptr);
+char *_stm_get_segment_base(long index);
bool _stm_in_transaction(stm_thread_local_t *tl);
void _stm_test_switch(stm_thread_local_t *tl);
@@ -259,11 +259,6 @@
HDR = lib.SIZEOF_MYOBJ
assert HDR == 8
-# from nursery.c
-SOME_MEDIUM_SIZE = 32*1024 - 48
-SOME_LARGE_SIZE = 100*1024 - 48
-NURSERY_SECTION_SIZE = 128*1024
-
class Conflict(Exception):
pass
@@ -317,9 +312,6 @@
def stm_get_real_address(obj):
return lib._stm_real_address(ffi.cast('object_t*', obj))
-def stm_get_segment_address(ptr):
- return int(ffi.cast('uintptr_t', lib._stm_segment_address(ptr)))
-
def stm_read(o):
lib.stm_read(o)
@@ -478,3 +470,9 @@
def push_root_no_gc(self):
"Pushes an invalid object, to crash in case the GC is called"
self.push_root(ffi.cast("object_t *", -1))
+
+ def check_char_everywhere(self, obj, expected_content, offset=HDR):
+ for i in range(len(self.tls)):
+ addr = lib._stm_get_segment_base(i)
+ content = addr[int(ffi.cast("uintptr_t", obj)) + offset]
+ assert content == expected_content
diff --git a/c7/test/test_basic.py b/c7/test/test_basic.py
--- a/c7/test/test_basic.py
+++ b/c7/test/test_basic.py
@@ -425,6 +425,15 @@
self.abort_transaction()
py.test.raises(EmptyStack, self.pop_root)
+ def test_check_content_after_commit(self):
+ self.start_transaction()
+ lp1 = stm_allocate(16)
+ stm_set_char(lp1, 'X')
+ self.push_root(lp1)
+ self.commit_transaction()
+ lp1 = self.pop_root()
+ self.check_char_everywhere(lp1, 'X')
+
# def test_resolve_write_write_no_conflict(self):
# self.start_transaction()
# p1 = stm_allocate(16)
More information about the pypy-commit
mailing list