From bc6ff2cb59abdb08527c0a5620b34a34bf3de5a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Dejean?= Date: Sat, 24 Jun 2006 17:39:49 +0000 Subject: [PATCH] Can't get cpu_stat_kstat, didn't close kstat, this will make other program MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2006-06-24 Benoît Dejean * open.c: (glibtop_get_kstats), (glibtop_open_s): Can't get cpu_stat_kstat, didn't close kstat, this will make other program used kstat wrong. Patch by hua.zhang@sun.com. Closes #345814. --- sysdeps/solaris/ChangeLog | 9 +++++++++ sysdeps/solaris/open.c | 10 ++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/sysdeps/solaris/ChangeLog b/sysdeps/solaris/ChangeLog index d93eba86..b1748f04 100644 --- a/sysdeps/solaris/ChangeLog +++ b/sysdeps/solaris/ChangeLog @@ -1,3 +1,12 @@ +2006-06-24 Benoît Dejean + + * open.c: (glibtop_get_kstats), (glibtop_open_s): + + Can't get cpu_stat_kstat, didn't close kstat, this will make other + program used kstat wrong. + Patch by hua.zhang@sun.com. + Closes #345814. + 2006-06-24 Benoît Dejean * netlist.c: (glibtop_get_netlist_s): diff --git a/sysdeps/solaris/open.c b/sysdeps/solaris/open.c index 998b7655..08754c6a 100644 --- a/sysdeps/solaris/open.c +++ b/sysdeps/solaris/open.c @@ -83,7 +83,8 @@ glibtop_get_kstats(glibtop *server) char cpu[20]; for(i = 0, checked = 0; i < GLIBTOP_NCPU || checked == new_ncpu; ++i) - if(server->machine.cpu_stat_kstat[i]) + if(!server->machine.cpu_stat_kstat[i]) + { sprintf(cpu, "cpu_stat%d", i); if(!(server->machine.cpu_stat_kstat[i] = @@ -145,6 +146,8 @@ glibtop_open_s (glibtop *server, const char *program_name, for(i = 0; page; ++i, page >>= 1); server->machine.pagesize = i - 1; server->machine.ticks = sysconf(_SC_CLK_TCK); + if(server->machine.kc) + kstat_close(server->machine.kc); server->machine.kc = kc = kstat_open (); #if 0 @@ -210,9 +213,11 @@ glibtop_open_s (glibtop *server, const char *program_name, /* Now let's have a bit of magic dust... */ -#if GLIBTOP_SOLARIS_RELEASE >= 560 +#if GLIBTOP_SOLARIS_RELEASE >= 50600 dl = dlopen("/usr/lib/libproc.so", RTLD_LAZY); + if(server->machine.libproc) + dlclose(server->machine.libproc); server->machine.libproc = dl; if(dl) { @@ -226,6 +231,7 @@ glibtop_open_s (glibtop *server, const char *program_name, server->machine.pgrab = (struct ps_prochandle *(*)(pid_t, int, int *)) dlsym(dl, "Pgrab"); server->machine.pfree = (void (*)(void *))dlsym(dl, "Pfree"); + } else {