diff options
author | Paolo Molaro <lupus@oddwiz.org> | 2005-01-18 13:10:11 +0300 |
---|---|---|
committer | Paolo Molaro <lupus@oddwiz.org> | 2005-01-18 13:10:11 +0300 |
commit | e33b7019e9453e8228c4d6045951df44b0798b43 (patch) | |
tree | 8c810d860f66bd7bd022e39d39b1e950ff18a367 /libgc | |
parent | 04bdcc000624f2679ae06eef530e3faab200fc61 (diff) |
Tue Jan 18 11:19:47 CET 2005 Paolo Molaro <lupus@ximian.com>
* pthread_stop_world.c: handle EINTR from sem_wait() call.
svn path=/trunk/mono/; revision=39085
Diffstat (limited to 'libgc')
-rw-r--r-- | libgc/ChangeLog | 5 | ||||
-rw-r--r-- | libgc/pthread_stop_world.c | 8 |
2 files changed, 10 insertions, 3 deletions
diff --git a/libgc/ChangeLog b/libgc/ChangeLog index d19f37792db..86c9f1a7b1e 100644 --- a/libgc/ChangeLog +++ b/libgc/ChangeLog @@ -1,3 +1,8 @@ + +Tue Jan 18 11:19:47 CET 2005 Paolo Molaro <lupus@ximian.com> + + * pthread_stop_world.c: handle EINTR from sem_wait() call. + 2004-08-20 Ben Maurer <bmaurer@users.sourceforge.net> * include/private/gc_priv.h: use the test glib does diff --git a/libgc/pthread_stop_world.c b/libgc/pthread_stop_world.c index 001a9e05c5c..06e919b2848 100644 --- a/libgc/pthread_stop_world.c +++ b/libgc/pthread_stop_world.c @@ -366,9 +366,11 @@ static void pthread_stop_world() } } for (i = 0; i < n_live_threads; i++) { - if (0 != (code = sem_wait(&GC_suspend_ack_sem))) { - GC_err_printf1("Sem_wait returned %ld\n", (unsigned long)code); - ABORT("sem_wait for handler failed"); + while (0 != (code = sem_wait(&GC_suspend_ack_sem))) { + if (errno != EINTR) { + GC_err_printf1("Sem_wait returned %ld\n", (unsigned long)code); + ABORT("sem_wait for handler failed"); + } } } #if DEBUG_THREADS |