summaryrefslogtreecommitdiff
path: root/sysdeps/solaris
diff options
context:
space:
mode:
authorBenoît Dejean <benoit@placenet.org>2006-06-24 17:39:49 +0000
committerBenoît Dejean <bdejean@src.gnome.org>2006-06-24 17:39:49 +0000
commitbc6ff2cb59abdb08527c0a5620b34a34bf3de5a3 (patch)
tree5d0c98f1a116a37e2374bde63d7a334ca7e97c29 /sysdeps/solaris
parent1826be8ef60ced57a5d3790caa8310c585041b46 (diff)
downloadlibgtop-bc6ff2cb59abdb08527c0a5620b34a34bf3de5a3.tar.gz
Can't get cpu_stat_kstat, didn't close kstat, this will make other program
2006-06-24 Benoît Dejean <benoit@placenet.org> * 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.
Diffstat (limited to 'sysdeps/solaris')
-rw-r--r--sysdeps/solaris/ChangeLog9
-rw-r--r--sysdeps/solaris/open.c10
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,5 +1,14 @@
2006-06-24 Benoît Dejean <benoit@placenet.org>
+ * 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 <benoit@placenet.org>
+
* netlist.c: (glibtop_get_netlist_s):
Fixed.
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
{