From 64cdb4434371adee47c497c961eb5a4b2f447a4d Mon Sep 17 00:00:00 2001 From: aristocratos Date: Wed, 12 Jan 2022 20:49:27 +0100 Subject: Fixed: Net speed rollover for 32-bit --- src/freebsd/btop_collect.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'src/freebsd') diff --git a/src/freebsd/btop_collect.cpp b/src/freebsd/btop_collect.cpp index e913c79..8531762 100644 --- a/src/freebsd/btop_collect.cpp +++ b/src/freebsd/btop_collect.cpp @@ -758,7 +758,7 @@ namespace Mem { disk_ios = 0; collect_disk(disks, mapping); - + old_uptime = uptime; } return mem; @@ -864,19 +864,21 @@ namespace Net { for (const string dir : {"download", "upload"}) { auto &saved_stat = net.at(iface).stat.at(dir); auto &bandwidth = net.at(iface).bandwidth.at(dir); - auto dirval = dir == "download" ? std::get<0>(ifstats[iface]) : std::get<1>(ifstats[iface]); - uint64_t val = saved_stat.last; - try { - val = max(dirval, val); - } catch (const std::invalid_argument &) { - } catch (const std::out_of_range &) { - } + uint64_t val = dir == "download" ? std::get<0>(ifstats[iface]) : std::get<1>(ifstats[iface]); //? Update speed, total and top values + if (val < saved_stat.last) { + saved_stat.rollover += saved_stat.last; + saved_stat.last = 0; + } + if (cmp_greater((unsigned long long)saved_stat.rollover + (unsigned long long)val, numeric_limits::max())) { + saved_stat.rollover = 0; + saved_stat.last = 0; + } saved_stat.speed = round((double)(val - saved_stat.last) / ((double)(new_timestamp - timestamp) / 1000)); if (saved_stat.speed > saved_stat.top) saved_stat.top = saved_stat.speed; - if (saved_stat.offset > val) saved_stat.offset = 0; - saved_stat.total = val - saved_stat.offset; + if (saved_stat.offset > val + saved_stat.rollover) saved_stat.offset = 0; + saved_stat.total = (val + saved_stat.rollover) - saved_stat.offset; saved_stat.last = val; //? Add values to graph -- cgit v1.2.3