reset kstat offsets on kstat_chain_update
This commit is contained in:
parent
1fb39c2148
commit
14f8285648
|
@ -59,6 +59,46 @@ int sigar_get_multi_kstats(sigar_t *sigar,
|
|||
return SIGAR_OK;
|
||||
}
|
||||
|
||||
#define KSTAT_LIST_INIT(sigar, dev) \
|
||||
sigar->koffsets.dev[0] = -1; \
|
||||
sigar->ks.dev.num = 0; \
|
||||
sigar->ks.dev.ks = NULL; \
|
||||
sigar->ks.dev.name = #dev; \
|
||||
sigar->ks.dev.nlen = sizeof(#dev)-1
|
||||
|
||||
void sigar_init_multi_kstats(sigar_t *sigar)
|
||||
{
|
||||
KSTAT_LIST_INIT(sigar, lo);
|
||||
KSTAT_LIST_INIT(sigar, hme);
|
||||
KSTAT_LIST_INIT(sigar, dmfe);
|
||||
KSTAT_LIST_INIT(sigar, ge);
|
||||
KSTAT_LIST_INIT(sigar, eri);
|
||||
}
|
||||
|
||||
void sigar_free_multi_kstats(sigar_t *sigar)
|
||||
{
|
||||
if (sigar->ks.lo.num) {
|
||||
free(sigar->ks.lo.ks);
|
||||
KSTAT_LIST_INIT(sigar, lo);
|
||||
}
|
||||
if (sigar->ks.hme.num) {
|
||||
free(sigar->ks.hme.ks);
|
||||
KSTAT_LIST_INIT(sigar, hme);
|
||||
}
|
||||
if (sigar->ks.dmfe.num) {
|
||||
free(sigar->ks.dmfe.ks);
|
||||
KSTAT_LIST_INIT(sigar, dmfe);
|
||||
}
|
||||
if (sigar->ks.ge.num) {
|
||||
free(sigar->ks.ge.ks);
|
||||
KSTAT_LIST_INIT(sigar, ge);
|
||||
}
|
||||
if (sigar->ks.eri.num) {
|
||||
free(sigar->ks.eri.ks);
|
||||
KSTAT_LIST_INIT(sigar, eri);
|
||||
}
|
||||
}
|
||||
|
||||
int sigar_get_kstats(sigar_t *sigar)
|
||||
{
|
||||
kstat_ctl_t *kc = sigar->kc;
|
||||
|
@ -129,6 +169,9 @@ int sigar_get_kstats(sigar_t *sigar)
|
|||
sigar->ks.syspages = kstat_lookup(kc, "unix", -1, "system_pages");
|
||||
sigar->ks.mempages = kstat_lookup(kc, "bunyip", -1, "mempages");
|
||||
|
||||
/* reset offsets on kstat_chain_update */
|
||||
sigar_free_multi_kstats(sigar);
|
||||
|
||||
return SIGAR_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -59,6 +59,10 @@ SIGAR_INLINE kid_t sigar_kstat_update(sigar_t *sigar);
|
|||
|
||||
int sigar_get_kstats(sigar_t *sigar);
|
||||
|
||||
void sigar_init_multi_kstats(sigar_t *sigar);
|
||||
|
||||
void sigar_free_multi_kstats(sigar_t *sigar);
|
||||
|
||||
int sigar_get_multi_kstats(sigar_t *sigar,
|
||||
kstat_list_t *kl,
|
||||
const char *name,
|
||||
|
|
|
@ -33,13 +33,6 @@
|
|||
#include <sys/utsname.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
#define KSTAT_LIST_INIT(sigar, dev) \
|
||||
sigar->koffsets.dev[0] = -1; \
|
||||
sigar->ks.dev.num = 0; \
|
||||
sigar->ks.dev.ks = NULL; \
|
||||
sigar->ks.dev.name = #dev; \
|
||||
sigar->ks.dev.nlen = strlen(#dev)
|
||||
|
||||
#define PROC_ERRNO ((errno == ENOENT) ? ESRCH : errno)
|
||||
|
||||
int sigar_os_open(sigar_t **sig)
|
||||
|
@ -94,16 +87,12 @@ int sigar_os_open(sigar_t **sig)
|
|||
sigar->ks.cpuid = NULL;
|
||||
sigar->ks.lcpu = 0;
|
||||
|
||||
KSTAT_LIST_INIT(sigar, lo);
|
||||
KSTAT_LIST_INIT(sigar, hme);
|
||||
KSTAT_LIST_INIT(sigar, dmfe);
|
||||
KSTAT_LIST_INIT(sigar, ge);
|
||||
KSTAT_LIST_INIT(sigar, eri);
|
||||
|
||||
sigar->koffsets.system[0] = -1;
|
||||
sigar->koffsets.mempages[0] = -1;
|
||||
sigar->koffsets.syspages[0] = -1;
|
||||
|
||||
|
||||
sigar_init_multi_kstats(sigar);
|
||||
|
||||
if ((status = sigar_get_kstats(sigar)) != SIGAR_OK) {
|
||||
fprintf(stderr, "status=%d\n", status);
|
||||
}
|
||||
|
@ -139,21 +128,8 @@ int sigar_os_close(sigar_t *sigar)
|
|||
{
|
||||
kstat_close(sigar->kc);
|
||||
|
||||
if (sigar->ks.lo.num) {
|
||||
free(sigar->ks.lo.ks);
|
||||
}
|
||||
if (sigar->ks.hme.num) {
|
||||
free(sigar->ks.hme.ks);
|
||||
}
|
||||
if (sigar->ks.dmfe.num) {
|
||||
free(sigar->ks.dmfe.ks);
|
||||
}
|
||||
if (sigar->ks.ge.num) {
|
||||
free(sigar->ks.ge.ks);
|
||||
}
|
||||
if (sigar->ks.eri.num) {
|
||||
free(sigar->ks.eri.ks);
|
||||
}
|
||||
sigar_free_multi_kstats(sigar);
|
||||
|
||||
if (sigar->ks.lcpu) {
|
||||
free(sigar->ks.cpu);
|
||||
free(sigar->ks.cpu_info);
|
||||
|
|
Loading…
Reference in New Issue