From 6b48a7fff51df59cefcf2d62948dd52e073ee7dd Mon Sep 17 00:00:00 2001 From: Tobias Ulmer Date: Wed, 13 Feb 2019 18:50:12 +0100 Subject: [PATCH] e2lib: handle read EINTR in poll loop Maybe eio.read() should generally loop on EINTR? Signed-off-by: Tobias Ulmer --- generic/e2lib.lua | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/generic/e2lib.lua b/generic/e2lib.lua index 24af52a..75efc4f 100644 --- a/generic/e2lib.lua +++ b/generic/e2lib.lua @@ -1357,11 +1357,15 @@ function e2lib.callcmd(argv, fdctv, workdir, envdict, nowait) if ptab.POLLIN then fdct = fd_find_writefunc_by_readfd(fdctv, ptab.fd) if fdct then - local data + local data, eno - data, re = eio.read(fdct._p.rfd, 4096) + data, re, eno = eio.read(fdct._p.rfd, 4096) if not data then - return false, re + if eno ~= errno.def2errnum("EINTR") then + return false, re + end + e2lib.logf(4, "poll loop read: fd=%d -> EINTR", + fdct._p.rfd) elseif data ~= "" then if fdct.linebuffer then fd_linebuffer(fdct, data) -- 2.39.5