diff options
Diffstat (limited to 'hurd/geteuids.c')
-rw-r--r-- | hurd/geteuids.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/hurd/geteuids.c b/hurd/geteuids.c index 840d80a0d6..7fb8b0ebbb 100644 --- a/hurd/geteuids.c +++ b/hurd/geteuids.c @@ -26,6 +26,7 @@ geteuids (int n, uid_t *uidset) int nuids; void *crit; +retry: crit = _hurd_critical_section_lock (); __mutex_lock (&_hurd_id.lock); @@ -33,6 +34,9 @@ geteuids (int n, uid_t *uidset) { __mutex_unlock (&_hurd_id.lock); _hurd_critical_section_unlock (crit); + if (err == EINTR) + /* Got a signal while inside an RPC of the critical section, retry again */ + goto retry; return __hurd_fail (err); } |