From d197c8ffa3cc61a747f318fd0ecef1f6e39b3935 Mon Sep 17 00:00:00 2001 From: Eyal Birger Date: Mon, 20 Jun 2016 08:36:47 +0300 Subject: [PATCH] uloop: handle waker pipe write() return value Recent glibc warns if result of read() or write() is unused. Added a retry in case of EINTR, all other faults are silently discarded. Signed-off-by: Eyal Birger ----- - I was not able to reproduce the EINTR case, but it seems to be the right thing to do - Retrying on EAGAIN in this case would be weird as there is no one to read from the other end of the pipe. We could call waker_consume() directly but since the size of the message is just one byte, I think this would be dead code --- uloop.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/uloop.c b/uloop.c index 0b75d4b..1c5bcee 100644 --- a/uloop.c +++ b/uloop.c @@ -387,7 +387,13 @@ static void uloop_handle_processes(void) static void uloop_signal_wake(void) { - write(waker_pipe, "w", 1); + do { + if (write(waker_pipe, "w", 1) < 0) { + if (errno == EINTR) + continue; + } + break; + } while (1); } static void uloop_handle_sigint(int signo)