Author: Armin Rigo <[email protected]>
Branch: 
Changeset: r167:34b9dddf5a8c
Date: 2013-06-17 13:54 +0200
http://bitbucket.org/pypy/stmgc/changeset/34b9dddf5a8c/

Log:    Next test

diff --git a/c4/et.c b/c4/et.c
--- a/c4/et.c
+++ b/c4/et.c
@@ -1345,6 +1345,14 @@
 struct tx_public_descriptor *stm_descriptor_array[MAX_THREADS] = {0};
 static revision_t descriptor_array_free_list = 0;
 
+void _stm_test_forget_previous_state(void)
+{
+  fprintf(stderr, "=======================================================\n");
+  assert(thread_descriptor == NULL);
+  memset(stm_descriptor_array, 0, sizeof(stm_descriptor_array));
+  descriptor_array_free_list = 0;
+}
+
 int DescriptorInit(void)
 {
   if (GCFLAG_PREBUILT != PREBUILT_FLAGS)
diff --git a/c4/et.h b/c4/et.h
--- a/c4/et.h
+++ b/c4/et.h
@@ -181,6 +181,7 @@
 gcptr stm_get_private_from_protected(long);  /* debugging */
 gcptr stm_get_read_obj(long);  /* debugging */
 void stm_clear_read_cache(void);  /* debugging */
+void _stm_test_forget_previous_state(void);  /* debugging */
 
 int DescriptorInit(void);
 void DescriptorDone(void);
diff --git a/c4/test/support.py b/c4/test/support.py
--- a/c4/test/support.py
+++ b/c4/test/support.py
@@ -90,6 +90,7 @@
     void *my_stub_thread(void);
 
     int _stm_can_access_memory(char *);
+    void stm_initialize_and_set_max_abort(int max_aborts);
     void stm_initialize_tests(int max_aborts);
 
     /* some constants normally private that are useful in the tests */
@@ -219,12 +220,18 @@
         return (void *)thread_descriptor->public_descriptor;
     }
 
-    void stm_initialize_tests(int max_aborts)
+    void stm_initialize_and_set_max_abort(int max_aborts)
     {
         stm_initialize();
         stm_set_max_aborts(max_aborts);
     }
 
+    void stm_initialize_tests(int max_aborts)
+    {
+        _stm_test_forget_previous_state();
+        stm_initialize_and_set_max_abort(max_aborts);
+    }
+
     size_t stmcb_size(gcptr obj)
     {
         if (gettid(obj) < 421) {
@@ -320,7 +327,7 @@
     def run(self, fn, lck):
         try:
             try:
-                lib.stm_initialize_tests(self.max_aborts)
+                lib.stm_initialize_and_set_max_abort(self.max_aborts)
                 try:
                     fn(self)
                 finally:
diff --git a/c4/test/test_gcpage.py b/c4/test/test_gcpage.py
--- a/c4/test/test_gcpage.py
+++ b/c4/test/test_gcpage.py
@@ -32,3 +32,14 @@
     assert distance(p2, p3) == HDR
     assert abs(distance(p3, p4)) > PAGE_ROOM / 2
     assert distance(p4, p5) == HDR + WORD
+
+def test_malloc_page_full():
+    plist = []
+    for i in range(PAGE_ROOM // HDR):
+        plist.append(lib.stmgcpage_malloc(HDR))
+    for p1, p2 in zip(plist[:-1], plist[1:]):
+        assert distance(p1, p2) == HDR
+    assert count_pages() == 1
+    p = lib.stmgcpage_malloc(HDR)
+    assert distance(plist[-1], p) != HDR
+    assert count_pages() == 2
diff --git a/c4/test/test_random.py b/c4/test/test_random.py
--- a/c4/test/test_random.py
+++ b/c4/test/test_random.py
@@ -362,7 +362,7 @@
                 p = self.pop_roots(extra=p)
 
     def run_single_thread(self):
-        lib.stm_initialize_tests(0)
+        lib.stm_initialize_and_set_max_abort(0)
         self.interruptible_transaction = False
         self.startrev()
         #
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to