aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/mach/hurd/setgroups.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/mach/hurd/setgroups.c')
-rw-r--r--sysdeps/mach/hurd/setgroups.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sysdeps/mach/hurd/setgroups.c b/sysdeps/mach/hurd/setgroups.c
index fc78de3fa1..cb6b8996b9 100644
--- a/sysdeps/mach/hurd/setgroups.c
+++ b/sysdeps/mach/hurd/setgroups.c
@@ -34,6 +34,7 @@ setgroups (size_t n, const gid_t *groups)
for (i = 0; i < n; ++i)
new[i] = groups[i];
+retry:
HURD_CRITICAL_BEGIN;
__mutex_lock (&_hurd_id.lock);
err = _hurd_check_ids ();
@@ -50,6 +51,9 @@ setgroups (size_t n, const gid_t *groups)
}
__mutex_unlock (&_hurd_id.lock);
HURD_CRITICAL_END;
+ if (err == EINTR)
+ /* Got a signal while inside an RPC of the critical section, retry again */
+ goto retry;
if (err)
return __hurd_fail (err);