From: Tobias Ulmer Date: Wed, 13 Feb 2019 17:50:12 +0000 (+0100) Subject: e2lib: handle read EINTR in poll loop X-Git-Tag: e2factory-2.3.18rc1~50 X-Git-Url: https://git.e2factory.org/?a=commitdiff_plain;h=6b48a7fff51df59cefcf2d62948dd52e073ee7dd;p=e2factory.git e2lib: handle read EINTR in poll loop Maybe eio.read() should generally loop on EINTR? Signed-off-by: Tobias Ulmer --- 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)