]> granicus.if.org Git - gc/commitdiff
Do not use spin locks if AO test-and-set is emulated (pthreads)
authorIvan Maidanski <ivmai@mail.ru>
Tue, 20 Nov 2018 20:44:08 +0000 (23:44 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Mon, 26 Nov 2018 06:06:54 +0000 (09:06 +0300)
* include/private/gc_locks.h [BASE_ATOMIC_OPS_EMULATED && GC_PTHREADS]
(USE_PTHREAD_LOCKS): Define.
* include/private/gc_locks.h [BASE_ATOMIC_OPS_EMULATED && GC_PTHREADS]
(USE_SPIN_LOCK): Undefine.
* pthread_support.c [(USE_SPIN_LOCK || !NO_PTHREAD_TRYLOCK)
&& AO_CLEAR] (GC_pause): Do not use AO_compiler_barrier() if
BASE_ATOMIC_OPS_EMULATED.
* pthread_support.c [AO_HAVE_char_load] (is_collecting): Do not use
AO_char_load() if BASE_ATOMIC_OPS_EMULATED.

include/private/gc_locks.h
pthread_support.c

index f6e45d59b640afa11e2444e73e4056d2fba62802..152ad9d3537219fb29a729cc86e09746524c9722 100644 (file)
@@ -54,7 +54,8 @@
 
 #  if (!defined(AO_HAVE_test_and_set_acquire) || defined(GC_RTEMS_PTHREADS) \
        || defined(SN_TARGET_ORBIS) || defined(SN_TARGET_PS3) \
-       || defined(GC_WIN32_THREADS) || defined(LINT2)) && defined(GC_PTHREADS)
+       || defined(GC_WIN32_THREADS) || defined(BASE_ATOMIC_OPS_EMULATED) \
+       || defined(LINT2)) && defined(GC_PTHREADS)
 #    define USE_PTHREAD_LOCKS
 #    undef USE_SPIN_LOCK
 #  endif
index 8a78efed007c27564a0f03bb23c627be29219992..e6622e020a7f7ac86731b86f2d4f882b55883d6b 100644 (file)
@@ -1940,7 +1940,7 @@ STATIC void GC_pause(void)
 
     for (i = 0; i < GC_PAUSE_SPIN_CYCLES; ++i) {
         /* Something that's unlikely to be optimized away. */
-#     ifdef AO_CLEAR
+#     if defined(AO_CLEAR) && !defined(BASE_ATOMIC_OPS_EMULATED)
         AO_compiler_barrier();
 #     else
         GC_noop1(i);
@@ -2022,7 +2022,7 @@ STATIC void GC_generic_lock(pthread_mutex_t * lock)
 
 #endif /* !USE_SPIN_LOCK || ... */
 
-#ifdef AO_HAVE_char_load
+#if defined(AO_HAVE_char_load) && !defined(BASE_ATOMIC_OPS_EMULATED)
 # define is_collecting() \
                 ((GC_bool)AO_char_load((unsigned char *)&GC_collecting))
 #else