Author: Remi Meier <remi.me...@inf.ethz.ch>
Branch: c8-private-pages
Changeset: r1557:06bc63626a03
Date: 2015-01-20 11:34 +0100
http://bitbucket.org/pypy/stmgc/changeset/06bc63626a03/

Log:    possibly fix a race

diff --git a/c8/stm/smallmalloc.c b/c8/stm/smallmalloc.c
--- a/c8/stm/smallmalloc.c
+++ b/c8/stm/smallmalloc.c
@@ -74,8 +74,17 @@
         long i;
         for (i = 0; i < GCPAGE_NUM_PAGES; i++) {
             /* add to free_uniform_pages list */
-            ((struct small_free_loc_s *)p)->nextpage = free_uniform_pages;
-            free_uniform_pages = (struct small_free_loc_s *)p;
+            struct small_free_loc_s *to_add = (struct small_free_loc_s *)p;
+
+        retry:
+            to_add->nextpage = free_uniform_pages;
+            if (UNLIKELY(!__sync_bool_compare_and_swap(
+                             &free_uniform_pages,
+                             to_add->nextpage,
+                             to_add))) {
+                goto retry;
+            }
+
             p += 4096;
         }
     }
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to