diff options
author | Benny Baumann <BenBE@geshi.org> | 2022-02-03 17:48:18 +0100 |
---|---|---|
committer | Benny Baumann <BenBE@geshi.org> | 2022-02-03 17:48:18 +0100 |
commit | 265a7b8a501174e2f5c8268a76b5e88d6688ad70 (patch) | |
tree | c03da4f24ea0046f651ae5e98ac5a161e949392a /linux/LinuxProcessList.c | |
parent | 3e1a27a98110d31c42397562490150247dd7dc6a (diff) |
Fix division by zero when calculating IO rates
Fixes #935
Diffstat (limited to 'linux/LinuxProcessList.c')
-rw-r--r-- | linux/LinuxProcessList.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/linux/LinuxProcessList.c b/linux/LinuxProcessList.c index 955aec99..492887d8 100644 --- a/linux/LinuxProcessList.c +++ b/linux/LinuxProcessList.c @@ -493,6 +493,8 @@ static void LinuxProcessList_readIoFile(LinuxProcess* process, openat_arg_t proc unsigned long long last_read = process->io_read_bytes; unsigned long long last_write = process->io_write_bytes; + unsigned long long time_delta = realtimeMs > process->io_last_scan_time_ms ? realtimeMs - process->io_last_scan_time_ms : 0; + char* buf = buffer; const char* line; while ((line = strsep(&buf, "\n")) != NULL) { @@ -502,7 +504,7 @@ static void LinuxProcessList_readIoFile(LinuxProcess* process, openat_arg_t proc process->io_rchar = strtoull(line + 7, NULL, 10); } else if (String_startsWith(line + 1, "ead_bytes: ")) { process->io_read_bytes = strtoull(line + 12, NULL, 10); - process->io_rate_read_bps = (process->io_read_bytes - last_read) * /*ms to s*/1000 / (realtimeMs - process->io_last_scan_time_ms); + process->io_rate_read_bps = time_delta ? (process->io_read_bytes - last_read) * /*ms to s*/1000. / time_delta : NAN; } break; case 'w': @@ -510,7 +512,7 @@ static void LinuxProcessList_readIoFile(LinuxProcess* process, openat_arg_t proc process->io_wchar = strtoull(line + 7, NULL, 10); } else if (String_startsWith(line + 1, "rite_bytes: ")) { process->io_write_bytes = strtoull(line + 13, NULL, 10); - process->io_rate_write_bps = (process->io_write_bytes - last_write) * /*ms to s*/1000 / (realtimeMs - process->io_last_scan_time_ms); + process->io_rate_write_bps = time_delta ? (process->io_write_bytes - last_write) * /*ms to s*/1000. / time_delta : NAN; } break; case 's': |