summaryrefslogtreecommitdiff
path: root/darwin_stop_world.c
diff options
context:
space:
mode:
Diffstat (limited to 'darwin_stop_world.c')
-rw-r--r--darwin_stop_world.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/darwin_stop_world.c b/darwin_stop_world.c
index fe04a088..e59339c9 100644
--- a/darwin_stop_world.c
+++ b/darwin_stop_world.c
@@ -536,7 +536,9 @@ STATIC GC_bool GC_suspend_thread_list(thread_act_array_t act_list, int count,
# ifdef DEBUG_THREADS
GC_log_printf("Suspending %p\n", (void *)(word)thread);
# endif
- kern_result = thread_suspend(thread);
+ do {
+ kern_result = thread_suspend(thread);
+ } while (kern_result == KERN_ABORTED);
if (kern_result != KERN_SUCCESS) {
/* The thread may have quit since the thread_threads() call we */
/* mark already suspended so it's not dealt with anymore later. */