diff options
author | Nuno Silva <nuno.m.ribeiro.silva@tecnico.ulisboa.pt> | 2021-06-06 02:26:13 +0100 |
---|---|---|
committer | Nuno Silva <nuno.m.ribeiro.silva@tecnico.ulisboa.pt> | 2021-06-06 02:42:05 +0100 |
commit | e97d0df3c9d80a5fe77d0e61e4116d157d97a45c (patch) | |
tree | d9a98289b19df5f965d31ce63e3d6e7091120c4d /net-speed-widget | |
parent | c4606372b3ddc4ac2bf16b67eadfc61598cd27aa (diff) |
net-speed-widget: fix race condition when using multiple monitors/widgets
Diffstat (limited to 'net-speed-widget')
-rw-r--r-- | net-speed-widget/net-speed.lua | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/net-speed-widget/net-speed.lua b/net-speed-widget/net-speed.lua index 8ba708d..6dd3b05 100644 --- a/net-speed-widget/net-speed.lua +++ b/net-speed-widget/net-speed.lua @@ -17,9 +17,6 @@ local ICONS_DIR = WIDGET_DIR .. 'icons/' local net_speed_widget = {} -local prev_rx = 0 -local prev_tx = 0 - local function convert_to_h(bytes) local speed local dim @@ -92,6 +89,11 @@ local function worker(user_args) 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 cur_vals = split(stdout, '\r\n') @@ -99,9 +101,9 @@ local function worker(user_args) local cur_rx = 0 local cur_tx = 0 - for i, _ in ipairs(cur_vals) do - if i%2 == 1 then cur_rx = cur_rx + cur_vals[i] end - if i%2 == 0 then cur_tx = cur_tx + cur_vals[i] end + for i, v in ipairs(cur_vals) do + if i%2 == 1 then cur_rx = cur_rx + v end + if i%2 == 0 then cur_tx = cur_tx + v end end local speed_rx = (cur_rx - prev_rx) / timeout |