[pypy-commit] stmgc c7-more-segments: Fix many tests
arigo
noreply at buildbot.pypy.org
Sun Mar 16 10:00:56 CET 2014
Author: Armin Rigo <arigo at tunes.org>
Branch: c7-more-segments
Changeset: r1030:1d43c3e1a2ff
Date: 2014-03-16 10:00 +0100
http://bitbucket.org/pypy/stmgc/changeset/1d43c3e1a2ff/
Log: Fix many tests
diff --git a/c7/stm/gcpage.c b/c7/stm/gcpage.c
--- a/c7/stm/gcpage.c
+++ b/c7/stm/gcpage.c
@@ -533,6 +533,8 @@
dprintf((" .----- major collection -----------------------\n"));
assert(_has_mutex());
+ if (0) { // XXX TEMP
+
/* first, force a minor collection in each of the other segments */
major_do_minor_collections();
@@ -566,6 +568,7 @@
dprintf((" | used after collection: %ld\n",
(long)pages_ctl.total_allocated));
+ }
dprintf((" `----------------------------------------------\n"));
reset_major_collection_requested();
diff --git a/c7/stm/misc.c b/c7/stm/misc.c
--- a/c7/stm/misc.c
+++ b/c7/stm/misc.c
@@ -41,9 +41,11 @@
}
#ifdef STM_TESTS
-uint8_t _stm_get_page_flag(uintptr_t index)
+uintptr_t _stm_get_private_page(uintptr_t pagenum)
{
- abort();//XXX
+ wlog_t *item;
+ TREE_FIND(*STM_PSEGMENT->private_page_mapping, pagenum, item, return 0);
+ return item->val;
}
long _stm_count_modified_old_objects(void)
diff --git a/c7/stm/weakref.c b/c7/stm/weakref.c
--- a/c7/stm/weakref.c
+++ b/c7/stm/weakref.c
@@ -118,7 +118,7 @@
static void stm_visit_old_weakrefs(void)
{
long i;
- for (i = 0; i < NB_SEGMENTS; i++) {
+ for (i = 1; i <= NB_SEGMENTS; i++) {
struct stm_priv_segment_info_s *pseg = get_priv_segment(i);
struct list_s *lst;
diff --git a/c7/stmgc.h b/c7/stmgc.h
--- a/c7/stmgc.h
+++ b/c7/stmgc.h
@@ -87,7 +87,7 @@
#include <stdbool.h>
bool _stm_was_read(object_t *obj);
bool _stm_was_written(object_t *obj);
-uint8_t _stm_get_page_flag(uintptr_t index);
+uintptr_t _stm_get_private_page(uintptr_t pagenum);
bool _stm_in_transaction(stm_thread_local_t *tl);
char *_stm_get_segment_base(long index);
void _stm_test_switch(stm_thread_local_t *tl);
diff --git a/c7/test/support.py b/c7/test/support.py
--- a/c7/test/support.py
+++ b/c7/test/support.py
@@ -46,7 +46,7 @@
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);
-uint8_t _stm_get_page_flag(uintptr_t index);
+uintptr_t _stm_get_private_page(uintptr_t pagenum);
int _stm_get_flags(object_t *obj);
void _stm_start_transaction(stm_thread_local_t *tl, stm_jmpbuf_t *jmpbuf);
@@ -98,8 +98,6 @@
GC_N_SMALL_REQUESTS = 36 # from gcpage.c
-SHARED_PAGE = 1 # from pages.h
-PRIVATE_PAGE = 3 # from pages.h
LARGE_MALLOC_OVERHEAD = 16 # from largemalloc.h
lib = ffi.verify('''
@@ -361,8 +359,8 @@
def stm_major_collect():
lib.stm_collect(1)
-def stm_get_page_flag(pagenum):
- return lib._stm_get_page_flag(pagenum)
+def stm_get_private_page(pagenum):
+ return lib._stm_get_private_page(pagenum)
def stm_get_obj_size(o):
return lib.stmcb_size_rounded_up(stm_get_real_address(o))
diff --git a/c7/test/test_gcpage.py b/c7/test/test_gcpage.py
--- a/c7/test/test_gcpage.py
+++ b/c7/test/test_gcpage.py
@@ -24,8 +24,8 @@
new = self.pop_root()
assert len(stm_get_obj_pages(new)) == 2
- assert ([stm_get_page_flag(p) for p in stm_get_obj_pages(new)]
- == [SHARED_PAGE]*2)
+ assert ([stm_get_private_page(p) for p in stm_get_obj_pages(new)]
+ == [0, 0])
assert not is_in_nursery(new)
stm_write(new)
@@ -33,11 +33,11 @@
# now proceed to write into the object in a new transaction
self.start_transaction()
- assert ([stm_get_page_flag(p) for p in stm_get_obj_pages(new)]
- == [SHARED_PAGE]*2)
+ assert ([stm_get_private_page(p) for p in stm_get_obj_pages(new)]
+ == [0, 0])
stm_write(new)
- assert ([stm_get_page_flag(p) for p in stm_get_obj_pages(new)]
- == [PRIVATE_PAGE]*2)
+ assert ([bool(stm_get_private_page(p)) for p in stm_get_obj_pages(new)]
+ == [True, True])
# write to 2nd page of object!!
wnew = stm_get_real_address(new)
@@ -52,8 +52,8 @@
self.switch(0)
self.abort_transaction()
- assert ([stm_get_page_flag(p) for p in stm_get_obj_pages(new)]
- == [PRIVATE_PAGE]*2)
+ assert ([bool(stm_get_private_page(p)) for p in stm_get_obj_pages(new)]
+ == [True, True])
def test_partial_alloced_pages(self):
self.start_transaction()
@@ -62,14 +62,14 @@
stm_minor_collect()
new = self.pop_root()
- assert stm_get_page_flag(stm_get_obj_pages(new)[0]) == SHARED_PAGE
+ assert stm_get_private_page(stm_get_obj_pages(new)[0]) == 0
assert stm_get_flags(new) & GCFLAG_WRITE_BARRIER
stm_write(new)
assert not (stm_get_flags(new) & GCFLAG_WRITE_BARRIER)
self.commit_transaction()
- assert stm_get_page_flag(stm_get_obj_pages(new)[0]) == SHARED_PAGE
+ assert stm_get_private_page(stm_get_obj_pages(new)[0]) == 0
assert stm_get_flags(new) & GCFLAG_WRITE_BARRIER
self.start_transaction()
@@ -78,7 +78,7 @@
stm_minor_collect()
newer = self.pop_root()
# 'new' is still in shared_page and committed
- assert stm_get_page_flag(stm_get_obj_pages(new)[0]) == SHARED_PAGE
+ assert stm_get_private_page(stm_get_obj_pages(new)[0]) == 0
assert stm_get_flags(new) & GCFLAG_WRITE_BARRIER
# 'newer' is now part of the SHARED page with 'new', but
# uncommitted, so no privatization has to take place:
@@ -86,10 +86,10 @@
assert stm_get_flags(newer) & GCFLAG_WRITE_BARRIER
stm_write(newer) # does not privatize
assert not (stm_get_flags(newer) & GCFLAG_WRITE_BARRIER)
- assert stm_get_page_flag(stm_get_obj_pages(newer)[0]) == SHARED_PAGE
+ assert stm_get_private_page(stm_get_obj_pages(newer)[0]) == 0
self.commit_transaction()
- assert stm_get_page_flag(stm_get_obj_pages(newer)[0]) == SHARED_PAGE
+ assert stm_get_private_page(stm_get_obj_pages(newer)[0]) == 0
assert stm_get_flags(newer) & GCFLAG_WRITE_BARRIER
def test_major_collection(self):
More information about the pypy-commit
mailing list