From 363c03e79c334cc0f3d75c1a3b60edbca0214465 Mon Sep 17 00:00:00 2001 From: Arvydas Sidorenko Date: Sat, 16 Jun 2012 12:54:51 +0200 Subject: Fixed io.lines() bug In Lua 5.2 io.lines() has to be used to iterate until EOF, otherwise the fd will not be closed and eventually tons of naughty messages will start to pop up saying that no more fd can be opened. Signed-off-by: Arvydas Sidorenko Signed-off-by: Adrian C. (anrxc) --- widgets/cpu.lua | 7 +++++-- widgets/raid.lua | 6 ++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/widgets/cpu.lua b/widgets/cpu.lua index b036b1e..125db96 100644 --- a/widgets/cpu.lua +++ b/widgets/cpu.lua @@ -7,7 +7,7 @@ -- {{{ Grab environment local ipairs = ipairs -local io = { lines = io.lines } +local io = { open = io.open } local setmetatable = setmetatable local math = { floor = math.floor } local table = { insert = table.insert } @@ -15,6 +15,7 @@ local string = { sub = string.sub, gmatch = string.gmatch } +local naught = require("naughty") -- }}} @@ -33,7 +34,8 @@ local function worker(format) local cpu_lines = {} -- Get CPU stats - for line in io.lines("/proc/stat") do + local fd = io.open("/proc/stat") + for line in fd:lines() do if string.sub(line, 1, 3) ~= "cpu" then break end cpu_lines[#cpu_lines+1] = {} @@ -42,6 +44,7 @@ local function worker(format) table.insert(cpu_lines[#cpu_lines], i) end end + fd:close() -- Ensure tables are initialized correctly for i = #cpu_total + 1, #cpu_lines do diff --git a/widgets/raid.lua b/widgets/raid.lua index e236d11..58a7359 100644 --- a/widgets/raid.lua +++ b/widgets/raid.lua @@ -4,7 +4,7 @@ ----------------------------------------------------- -- {{{ Grab environment -local io = { lines = io.lines } +local io = { open = io.open } local setmetatable = setmetatable local string = { len = string.len, @@ -33,7 +33,8 @@ local function worker(format, warg) } -- Linux manual page: md(4) - for line in io.lines("/proc/mdstat") do + local fd = io.open("/proc/mdstat") + for line in fd:lines() do if mddev[warg]["found"] then local updev = string.match(line, "%[[_U]+%]") @@ -50,6 +51,7 @@ local function worker(format, warg) end end end + fd:close() return {mddev[warg]["assigned"], mddev[warg]["active"]} end -- cgit v1.2.3