From 08916f4335e96e4a3c9dcf77262fa151348ed93c Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Wed, 17 Jan 2018 21:15:47 +0100 Subject: [PATCH] luci-app-nlbw: fix sporadic premature EOF when rendering JSON data Specific timing patterns sometimes caused the LuCI controller to prematurely stop reading data, resulting in truncated JSON output. Turn the nonblocking waitpid() call into a blocking call after the IO read loop to avoid this issue. Signed-off-by: Jo-Philipp Wich --- .../luci-app-nlbwmon/luasrc/controller/nlbw.lua | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/applications/luci-app-nlbwmon/luasrc/controller/nlbw.lua b/applications/luci-app-nlbwmon/luasrc/controller/nlbw.lua index bb56bc6e6..a8c577929 100644 --- a/applications/luci-app-nlbwmon/luasrc/controller/nlbw.lua +++ b/applications/luci-app-nlbwmon/luasrc/controller/nlbw.lua @@ -28,16 +28,17 @@ local function exec(cmd, args, writer) while true do local buffer = fdi:read(2048) - local wpid, stat, code = nixio.waitpid(pid, "nohang") - if writer and buffer and #buffer > 0 then - writer(buffer) + if not buffer or #buffer == 0 then + break end - if wpid and stat == "exited" then - break + if writer then + writer(buffer) end end + + nixio.waitpid(pid) elseif pid == 0 then nixio.dup(fdo, nixio.stdout) fdi:close() -- 2.25.1