Author: Remi Meier Branch: c7-refactor Changeset: r861:4915e227b68f Date: 2014-02-25 16:00 +0100 http://bitbucket.org/pypy/stmgc/changeset/4915e227b68f/
Log: fix for race condition (see comment in pages.h for PRIVATE_PAGE) diff --git a/c7/stm/pages.c b/c7/stm/pages.c --- a/c7/stm/pages.c +++ b/c7/stm/pages.c @@ -110,6 +110,7 @@ static void _pages_privatize(uintptr_t pagenum, uintptr_t count, bool full) { + /* narrow the range of pages to privatize from the end: */ while (flag_page_private[pagenum + count - 1] == PRIVATE_PAGE) { if (!--count) return; diff --git a/c7/stm/pages.h b/c7/stm/pages.h --- a/c7/stm/pages.h +++ b/c7/stm/pages.h @@ -19,17 +19,21 @@ static void pages_initialize_shared(uintptr_t pagenum, uintptr_t count); //static void pages_make_shared_again(uintptr_t pagenum, uintptr_t count); +static void mutex_pages_lock(void); +static void mutex_pages_unlock(void); + inline static void pages_privatize(uintptr_t pagenum, uintptr_t count, bool full) { + mutex_pages_lock(); while (flag_page_private[pagenum] == PRIVATE_PAGE) { - if (!--count) + if (!--count) { + mutex_pages_unlock(); return; + } pagenum++; } + mutex_pages_unlock(); _pages_privatize(pagenum, count, full); } -static void mutex_pages_lock(void); -static void mutex_pages_unlock(void); - //static bool is_fully_in_shared_pages(object_t *obj); -- not needed? _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit