Revert 'Workaround a hang in sigsuspend if compiled with Thread Sanitizer'
authorIvan Maidanski <ivmai@mail.ru>
Fri, 17 Nov 2017 18:20:54 +0000 (21:20 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Fri, 17 Nov 2017 18:20:54 +0000 (21:20 +0300)
This reverts commit 04fd7b5309596423e4342502d3123028d836d551.

Because it does not avoid hangs in all cases when stopping the world.
A better solution is to re-enable signals in the suspend handler.

pthread_stop_world.c

index b30b9e1..cfb4c1a 100644 (file)
@@ -327,16 +327,7 @@ STATIC void GC_suspend_handler_inner(ptr_t dummy GC_ATTR_UNUSED,
   /* really safe to proceed.  Under normal circumstances,       */
   /* this code should not be executed.                          */
   do {
-#   ifdef THREAD_SANITIZER
-      /* TODO: A temporal workaround.  Generally, signal handlers are   */
-      /* delayed until the next call to TSan ProcessPendingSignals, the */
-      /* latter is called on interceptors, system calls, and atomic     */
-      /* operations only.  Thus, the collector hangs sometimes (as of   */
-      /* now) if the signal occurs while waiting in sigsuspend().       */
-      sched_yield();
-#   else
       sigsuspend (&suspend_handler_mask);
-#   endif
   } while (AO_load_acquire(&GC_world_is_stopped)
            && AO_load(&GC_stop_count) == my_stop_count);
   /* If the RESTART signal gets lost, we can still lose.  That should   */