From: GNU Libc Maintainers Date: Fri, 10 Jan 2020 22:21:25 +0000 (+0000) Subject: tg-eintr X-Git-Tag: archive/raspbian/2.29-9+rpi1~1^2~64 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=ac6d9fa9b9fa05cfb099e7d8495bc82d327cc1b6;p=glibc.git tg-eintr commit 230b85f414291ac955827aba15cfbd103ab6ebdd Author: Samuel Thibault Date: Thu Jun 9 01:15:10 2016 +0200 Fix pipe() call returning EINTR sometimes because it uses a critical section Gbp-Pq: Topic hurd-i386 Gbp-Pq: Name tg-eintr.diff --- diff --git a/hurd/hurdsock.c b/hurd/hurdsock.c index ab74a521e..0f0b2e171 100644 --- a/hurd/hurdsock.c +++ b/hurd/hurdsock.c @@ -52,6 +52,7 @@ _hurd_socket_server (int domain, int dead) return MACH_PORT_NULL; } +retry: HURD_CRITICAL_BEGIN; __mutex_lock (&lock); @@ -102,6 +103,10 @@ _hurd_socket_server (int domain, int dead) __mutex_unlock (&lock); HURD_CRITICAL_END; + if (!server && errno == EINTR) + /* Got a signal while inside an RPC of the critical section, retry again */ + goto retry; + return server; }