diff options
Diffstat (limited to 'sysdeps/mach/hurd/fork.c')
-rw-r--r-- | sysdeps/mach/hurd/fork.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/sysdeps/mach/hurd/fork.c b/sysdeps/mach/hurd/fork.c index 1c5299e686..92a51693e0 100644 --- a/sysdeps/mach/hurd/fork.c +++ b/sysdeps/mach/hurd/fork.c @@ -70,6 +70,7 @@ __fork (void) __run_fork_handlers (atfork_run_prepare, true); ss = _hurd_self_sigstate (); +retry: __spin_lock (&ss->critical_section_lock); #undef LOSE @@ -718,6 +719,9 @@ __fork (void) } _hurd_critical_section_unlock (ss); + if (err == EINTR) + /* Got a signal while inside an RPC of the critical section, retry again */ + goto retry; if (!err) { |