[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