summaryrefslogtreecommitdiff
path: root/pthread_stop_world.c
diff options
context:
space:
mode:
Diffstat (limited to 'pthread_stop_world.c')
-rw-r--r--pthread_stop_world.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/pthread_stop_world.c b/pthread_stop_world.c
index ba0771c9..cbb3b2b8 100644
--- a/pthread_stop_world.c
+++ b/pthread_stop_world.c
@@ -142,13 +142,12 @@ STATIC volatile AO_t GC_stop_count;
/* before they are expected to stop (unless */
/* they have stopped voluntarily). */
-#ifndef NO_RETRY_SIGNALS
- /* Any platform could lose signals, so let's be conservative and */
- /* always enable signals retry logic. */
- STATIC GC_bool GC_retry_signals = TRUE;
+#if defined(CAN_HANDLE_FORK) && defined(THREAD_SANITIZER)
+ GC_INNER
#else
- STATIC GC_bool GC_retry_signals = FALSE;
+ STATIC
#endif
+ GC_bool GC_retry_signals = FALSE;
/*
* We use signals to stop threads during GC.
@@ -1404,6 +1403,11 @@ GC_INNER void GC_stop_init(void)
if (sigdelset(&suspend_handler_mask, GC_sig_thr_restart) != 0)
ABORT("sigdelset failed");
+# ifndef NO_RETRY_SIGNALS
+ /* Any platform could lose signals, so let's be conservative and */
+ /* always enable signals retry logic. */
+ GC_retry_signals = TRUE;
+# endif
/* Override the default value of GC_retry_signals. */
str = GETENV("GC_RETRY_SIGNALS");
if (str != NULL) {
@@ -1418,6 +1422,7 @@ GC_INNER void GC_stop_init(void)
GC_COND_LOG_PRINTF(
"Will retry suspend and restart signals if necessary\n");
}
+
# ifndef NO_SIGNALS_UNBLOCK_IN_MAIN
/* Explicitly unblock the signals once before new threads creation. */
GC_unblock_gc_signals();