From 3a7f02352a458c592ae23ed93228636535af1831 Mon Sep 17 00:00:00 2001 From: Drazen Kacar Date: Wed, 31 Mar 1999 07:48:37 +0000 Subject: [PATCH] make it work with Solaris 2.6 and older. A part of it should be moved to 1999-03-31 Drazen Kacar * loadavg.c: make it work with Solaris 2.6 and older. A part of it should be moved to open.c. --- sysdeps/solaris/ChangeLog | 5 +++++ sysdeps/solaris/loadavg.c | 35 +++++++++++++++++++++++++++++++++-- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/sysdeps/solaris/ChangeLog b/sysdeps/solaris/ChangeLog index 6e7627d3..c829779b 100644 --- a/sysdeps/solaris/ChangeLog +++ b/sysdeps/solaris/ChangeLog @@ -1,3 +1,8 @@ +1999-03-31 Drazen Kacar + + * loadavg.c: make it work with Solaris 2.6 and older. A part + of it should be moved to open.c. + 1999-03-19 Martin Baulig Added first kstat based implementation for Solaris 7. diff --git a/sysdeps/solaris/loadavg.c b/sysdeps/solaris/loadavg.c index c35c180b..8629acb9 100644 --- a/sysdeps/solaris/loadavg.c +++ b/sysdeps/solaris/loadavg.c @@ -24,7 +24,12 @@ #include #include +#ifdef HAVE_GETLOADAVG #include +#else +#include +#include +#endif static const unsigned long _glibtop_sysdeps_loadavg = (1 << GLIBTOP_LOADAVG_LOADAVG); @@ -37,15 +42,41 @@ glibtop_init_loadavg_s (glibtop *server) server->sysdeps.loadavg = _glibtop_sysdeps_loadavg; } -/* Provides load averange. */ +/* Provides load average. */ void glibtop_get_loadavg_s (glibtop *server, glibtop_loadavg *buf) { +#ifndef HAVE_GETLOADAVG + kstat_ctl_t *kc; + static kstat_t *ksp = NULL; + kid_t k; + int i; + static char *avestrings[] = { "avenrun_1min", + "avenrun_5min", + "avenrun_15min" }; +#endif memset (buf, 0, sizeof (glibtop_loadavg)); +#ifdef HAVE_GETLOADAVG if (getloadavg (buf->loadavg, 3)) return; - +#else + kc = server->machine.kc; + if((k = kstat_chain_update(kc)) < 0) + return; + if(k || !ksp) + if(!(ksp = kstat_lookup(kc, "unix", 0, "system_misc"))) + return; + if(kstat_read(kc, ksp, 0) < 0) + return; + for(i = 0; i < 3; ++i) /* Do we have a countof macro? */ + { + kstat_named_t *kn; + kn = (kstat_named_t *)kstat_data_lookup(ksp, avestrings[i]); + if(kn) + buf->loadavg[i] = (double)kn->value.ul / FSCALE; + } +#endif buf->flags = _glibtop_sysdeps_loadavg; }