From: Jonathan Chambers Date: Tue, 24 Jul 2018 20:46:52 +0000 (-0400) Subject: Perform thread_suspend in loop as it may be interrupted (Darwin) X-Git-Tag: v8.0.0~61 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e8cdc7c2dbc0edeb185bf7438f1982c6bc74a82e;p=gc Perform thread_suspend in loop as it may be interrupted (Darwin) * darwin_stop_world.c (GC_stop_world): Retry thread_suspend() on KERN_ABORTED. --- diff --git a/darwin_stop_world.c b/darwin_stop_world.c index fd04fcd2..fe04a088 100644 --- a/darwin_stop_world.c +++ b/darwin_stop_world.c @@ -636,7 +636,9 @@ GC_INNER void GC_stop_world(void) if ((p->flags & FINISHED) == 0 && !p->thread_blocked && p->stop_info.mach_thread != my_thread) { - kern_result = thread_suspend(p->stop_info.mach_thread); + do { + kern_result = thread_suspend(p->stop_info.mach_thread); + } while (kern_result == KERN_ABORTED); if (kern_result != KERN_SUCCESS) ABORT("thread_suspend failed"); if (GC_on_thread_event)