net-speed-widget: fix race condition when using multiple monitors/widgets

This commit is contained in:
Nuno Silva 2021-06-06 02:26:13 +01:00
parent c4606372b3
commit e97d0df3c9
1 changed files with 8 additions and 6 deletions

View File

@ -17,9 +17,6 @@ local ICONS_DIR = WIDGET_DIR .. 'icons/'
local net_speed_widget = {} local net_speed_widget = {}
local prev_rx = 0
local prev_tx = 0
local function convert_to_h(bytes) local function convert_to_h(bytes)
local speed local speed
local dim local dim
@ -92,6 +89,11 @@ local function worker(user_args)
end end
} }
-- make sure these are not shared across different worker/widgets (e.g. two monitors)
-- otherwise the speed will be randomly split among the worker in each monitor
local prev_rx = 0
local prev_tx = 0
local update_widget = function(widget, stdout) local update_widget = function(widget, stdout)
local cur_vals = split(stdout, '\r\n') local cur_vals = split(stdout, '\r\n')
@ -99,9 +101,9 @@ local function worker(user_args)
local cur_rx = 0 local cur_rx = 0
local cur_tx = 0 local cur_tx = 0
for i, _ in ipairs(cur_vals) do for i, v in ipairs(cur_vals) do
if i%2 == 1 then cur_rx = cur_rx + cur_vals[i] end if i%2 == 1 then cur_rx = cur_rx + v end
if i%2 == 0 then cur_tx = cur_tx + cur_vals[i] end if i%2 == 0 then cur_tx = cur_tx + v end
end end
local speed_rx = (cur_rx - prev_rx) / timeout local speed_rx = (cur_rx - prev_rx) / timeout