From: Jo-Philipp Wich Date: Wed, 17 Jan 2018 20:15:47 +0000 (+0100) Subject: luci-app-nlbw: fix sporadic premature EOF when rendering JSON data X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fluci.git;a=commitdiff_plain;h=08916f4335e96e4a3c9dcf77262fa151348ed93c;hp=--cc 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 --- 08916f4335e96e4a3c9dcf77262fa151348ed93c 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()