mirror of https://github.com/xzeldon/htop.git
netbsd: add more robust error handling for sysctl HW_IOSTATS
This commit is contained in:
parent
5b8654d341
commit
324f9d048d
|
@ -335,15 +335,23 @@ bool Platform_getDiskIO(DiskIOData* data) {
|
||||||
struct io_sysctl *iostats = NULL;
|
struct io_sysctl *iostats = NULL;
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
|
|
||||||
/* get the size of the IO statistic array */
|
for (int retry = 3; retry > 0; retry--) {
|
||||||
(void)sysctl(mib, __arraycount(mib), iostats, &size, NULL, 0);
|
/* get the size of the IO statistic array */
|
||||||
if (size == 0)
|
if (sysctl(mib, __arraycount(mib), iostats, &size, NULL, 0) < 0)
|
||||||
return false;
|
CRT_fatalError("Unable to get size of io_sysctl");
|
||||||
|
|
||||||
iostats = xMalloc(size);
|
if (size == 0) {
|
||||||
if (sysctl(mib, __arraycount(mib), iostats, &size, NULL, 0) < 0) {
|
free(iostats);
|
||||||
free(iostats);
|
return false;
|
||||||
return false;
|
}
|
||||||
|
|
||||||
|
iostats = xRealloc(iostats, size);
|
||||||
|
|
||||||
|
if (sysctl(mib, __arraycount(mib), iostats, &size, NULL, 0) == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (errno != ENOMEM)
|
||||||
|
CRT_fatalError("Unable to get disk IO statistics");
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t bytesReadSum = 0;
|
uint64_t bytesReadSum = 0;
|
||||||
|
|
Loading…
Reference in New Issue