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