Author: Armin Rigo <ar...@tunes.org> Branch: nogil-unsafe-2 Changeset: r92157:cd60a593d1b4 Date: 2017-08-16 09:44 +0400 http://bitbucket.org/pypy/pypy/changeset/cd60a593d1b4/
Log: Fixes. Now the branch seems to "work" again diff --git a/rpython/rlib/rgil.py b/rpython/rlib/rgil.py --- a/rpython/rlib/rgil.py +++ b/rpython/rlib/rgil.py @@ -3,7 +3,7 @@ from rpython.translator.tool.cbuild import ExternalCompilationInfo from rpython.rtyper.lltypesystem import lltype, llmemory, rffi from rpython.rtyper.extregistry import ExtRegistryEntry -from rpython.rlib.objectmodel import not_rpython +from rpython.rlib.objectmodel import not_rpython, we_are_translated # these functions manipulate directly the GIL, whose definition does not # escape the C code itself @@ -122,21 +122,24 @@ _gil_allocate() def release(): - return # this function must not raise, in such a way that the exception # transformer knows that it cannot raise! - _gil_release() -#release._gctransformer_hint_cannot_collect_ = True -#release._dont_reach_me_in_del_ = True + if we_are_translated(): + _gil_release() +release._gctransformer_hint_cannot_collect_ = True +release._dont_reach_me_in_del_ = True def acquire(): - return - from rpython.rlib import rthread - _gil_acquire() - rthread.gc_thread_run() - _after_thread_switch() -#acquire._gctransformer_hint_cannot_collect_ = True -#acquire._dont_reach_me_in_del_ = True + ###XXX commented some lines out for nogil-unsafe-2 + ###XXX but note that _gil_acquire() does not acquire any GIL there! + + ###from rpython.rlib import rthread + if we_are_translated(): + _gil_acquire() + ###rthread.gc_thread_run() + ###_after_thread_switch() +acquire._gctransformer_hint_cannot_collect_ = True +acquire._dont_reach_me_in_del_ = True # The _gctransformer_hint_cannot_collect_ hack is needed for # translations in which the *_external_call() functions are not inlined. diff --git a/rpython/translator/c/src/thread.h b/rpython/translator/c/src/thread.h --- a/rpython/translator/c/src/thread.h +++ b/rpython/translator/c/src/thread.h @@ -75,22 +75,21 @@ SLOWPATH: signal "now at safepoint"; 111 -> 110 */ -#define _RPyGilAcquire() /*do { \ - assert((__sync_fetch_and_add( \ - &RPY_THREADLOCALREF_GET(synclock), 0) \ - & 0b001) == 0b0); \ + +/* in the nogil-unsafe-2 branch, + !! THIS IS NOT A GIL !! It's the logic to do global safe-points +*/ +#define _RPyGilAcquire() do { \ if (!__sync_bool_compare_and_swap( \ &RPY_THREADLOCALREF_GET(synclock), 0b100L, 0b101L)) \ RPyGilAcquireSlowPath(); \ - } while (0)*/ + } while (0) -#define _RPyGilRelease() /*do { \ - assert((__sync_fetch_and_add( \ - &RPY_THREADLOCALREF_GET(synclock), 0) & 0b101) == 0b101); \ +#define _RPyGilRelease() do { \ if (!__sync_bool_compare_and_swap( \ &RPY_THREADLOCALREF_GET(synclock), 0b101L, 0b100L)) \ RPyGilReleaseSlowPath(); \ - } while (0)*/ + } while (0) static inline long *_RPyFetchFastGil(void) { abort(); diff --git a/rpython/translator/c/src/thread_gil.c b/rpython/translator/c/src/thread_gil.c --- a/rpython/translator/c/src/thread_gil.c +++ b/rpython/translator/c/src/thread_gil.c @@ -45,6 +45,10 @@ void RPyGilAcquireSlowPath(void) { + assert((__sync_fetch_and_add( + &RPY_THREADLOCALREF_GET(synclock), 0) + & 0b001) == 0b0); + /* wait until the master leaves the safe point */ pthread_mutex_lock(&master_mutex); @@ -63,6 +67,9 @@ void RPyGilReleaseSlowPath(void) { + assert((__sync_fetch_and_add( + &RPY_THREADLOCALREF_GET(synclock), 0) & 0b101) == 0b101); + pthread_mutex_lock(&sync_mutex); assert(RPY_THREADLOCALREF_GET(synclock) == 0b111L); _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit