Author: Armin Rigo <[email protected]>
Branch: 
Changeset: r946:732edc0f0e90
Date: 2014-03-04 17:55 +0100
http://bitbucket.org/pypy/stmgc/changeset/732edc0f0e90/

Log:    Small refactoring to avoid the step that clears the write locks
        first.

diff --git a/c7/stm/gcpage.c b/c7/stm/gcpage.c
--- a/c7/stm/gcpage.c
+++ b/c7/stm/gcpage.c
@@ -145,7 +145,7 @@
 
 static struct list_s *mark_objects_to_trace;
 
-#define WL_VISITED   42
+#define WL_VISITED   255
 
 
 static inline uintptr_t mark_loc(object_t *obj)
@@ -159,15 +159,13 @@
 static inline bool mark_visited_test(object_t *obj)
 {
     uintptr_t lock_idx = mark_loc(obj);
-    assert(write_locks[lock_idx] == 0 || write_locks[lock_idx] == WL_VISITED);
-    return write_locks[lock_idx] != 0;
+    return write_locks[lock_idx] == WL_VISITED;
 }
 
 static inline bool mark_visited_test_and_set(object_t *obj)
 {
     uintptr_t lock_idx = mark_loc(obj);
-    assert(write_locks[lock_idx] == 0 || write_locks[lock_idx] == WL_VISITED);
-    if (write_locks[lock_idx] != 0) {
+    if (write_locks[lock_idx] == WL_VISITED) {
         return true;
     }
     else {
@@ -179,8 +177,7 @@
 static inline bool mark_visited_test_and_clear(object_t *obj)
 {
     uintptr_t lock_idx = mark_loc(obj);
-    assert(write_locks[lock_idx] == 0 || write_locks[lock_idx] == WL_VISITED);
-    if (write_locks[lock_idx] != 0) {
+    if (write_locks[lock_idx] == WL_VISITED) {
         write_locks[lock_idx] = 0;
         return true;
     }
@@ -492,25 +489,6 @@
     memset(write_locks + lock2_idx, 0, sizeof(write_locks) - lock2_idx);
 }
 
-static void major_clear_write_locks(void)
-{
-    long i;
-    for (i = 0; i < NB_SEGMENTS; i++) {
-        struct stm_priv_segment_info_s *pseg = get_priv_segment(i);
-
-        LIST_FOREACH_R(
-            pseg->modified_old_objects,
-            object_t * /*item*/,
-            ({
-                assert(item != NULL);
-
-                uintptr_t lock_idx = mark_loc(item);
-                assert(write_locks[lock_idx] == pseg->write_lock_num);
-                write_locks[lock_idx] = 0;
-            }));
-    }
-}
-
 static void major_set_write_locks(void)
 {
     /* restore the write locks on the modified objects */
@@ -541,8 +519,6 @@
     dprintf((" | used before collection: %ld\n",
              (long)pages_ctl.total_allocated));
 
-    major_clear_write_locks();
-
     /* marking */
     LIST_CREATE(mark_objects_to_trace);
     mark_visit_from_modified_objects();
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to