* pthread_stop_world.c (GC_suspend_handler_inner): If signal number
is zero then silently return (instead of ABORT) if FREEBSD (to
workaround a bug in FreeBSD 9.2-RELEASE regarding signals processing,
bug is observed only if THREAD_LOCAL_ALLOC defined).
IF_CANCEL(int cancel_state;)
AO_t my_stop_count = AO_load(&GC_stop_count);
- if ((signed_word)sig_arg != GC_sig_suspend)
+ if ((signed_word)sig_arg != GC_sig_suspend) {
+# if defined(GC_FREEBSD_THREADS)
+ /* Workaround "deferred signal handling" bug in FreeBSD 9.2. */
+ if (0 == sig_arg) return;
+# endif
ABORT("Bad signal in suspend_handler");
+ }
DISABLE_CANCEL(cancel_state);
/* pthread_setcancelstate is not defined to be async-signal-safe. */