From c9ef9f4bb62bed8223c619cd3840bdaf0cf7eb0b Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Wed, 21 Apr 2010 13:47:06 -0700 Subject: [PATCH 01/10] add close() method --- bindings/java/src/org/hyperic/sigar/Humidor.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/bindings/java/src/org/hyperic/sigar/Humidor.java b/bindings/java/src/org/hyperic/sigar/Humidor.java index c039bded..542d687e 100644 --- a/bindings/java/src/org/hyperic/sigar/Humidor.java +++ b/bindings/java/src/org/hyperic/sigar/Humidor.java @@ -36,7 +36,7 @@ public class Humidor { private Object LOCK = new Object(); private InvocationHandler _handler; private SigarProxy _sigar; - private Sigar _impl; + private Sigar _impl, _inst; private Humidor() {} @@ -69,7 +69,7 @@ public class Humidor { synchronized(LOCK) { if (_sigar == null) { if (_impl == null) { - _impl = new Sigar(); + _inst = _impl = new Sigar(); } _handler = new MyHandler(_impl); _sigar = (SigarProxy) @@ -84,4 +84,13 @@ public class Humidor { public static Humidor getInstance() { return INSTANCE; } + + //close the Sigar instance if getSigar() created it + public void close() { + if (_inst != null) { + _inst.close(); + _impl = _inst = null; + } + _sigar = null; + } } From bbc21090a1232406518a8191c7dea2a1a83aea6c Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Wed, 21 Apr 2010 13:48:10 -0700 Subject: [PATCH 02/10] proc_args_destroy if os_proc_args_get != SIGAR_OK --- src/sigar.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/sigar.c b/src/sigar.c index 8d6a2a4b..89f724cb 100644 --- a/src/sigar.c +++ b/src/sigar.c @@ -373,8 +373,13 @@ SIGAR_DECLARE(int) sigar_proc_args_get(sigar_t *sigar, sigar_pid_t pid, sigar_proc_args_t *procargs) { + int status; sigar_proc_args_create(procargs); - return sigar_os_proc_args_get(sigar, pid, procargs); + status = sigar_os_proc_args_get(sigar, pid, procargs); + if (status != SIGAR_OK) { + sigar_proc_args_destroy(sigar, procargs); + } + return status; } int sigar_file_system_list_create(sigar_file_system_list_t *fslist) From 6259451277d7bef476f0fd1ae3391c1444740cf5 Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Wed, 21 Apr 2010 13:49:24 -0700 Subject: [PATCH 03/10] leave proc_args_destroy to the caller --- src/os/solaris/solaris_sigar.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/os/solaris/solaris_sigar.c b/src/os/solaris/solaris_sigar.c index 2286d4a3..32e52146 100644 --- a/src/os/solaris/solaris_sigar.c +++ b/src/os/solaris/solaris_sigar.c @@ -953,7 +953,6 @@ int sigar_os_proc_args_get(sigar_t *sigar, sigar_pid_t pid, if (argvp != argvb) { free(argvp); } - sigar_proc_args_destroy(sigar, procargs); return errno; } From 0bee437f85d2f71d51d4363d0311794b41cc4689 Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Wed, 21 Apr 2010 13:50:30 -0700 Subject: [PATCH 04/10] don't set procargs.size = 0 else destroy won't free --- src/os/solaris/solaris_sigar.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/os/solaris/solaris_sigar.c b/src/os/solaris/solaris_sigar.c index 32e52146..bcb38057 100644 --- a/src/os/solaris/solaris_sigar.c +++ b/src/os/solaris/solaris_sigar.c @@ -901,7 +901,7 @@ int sigar_os_proc_args_get(sigar_t *sigar, sigar_pid_t pid, pinfo = sigar->pinfo; if (pinfo->pr_argc == 0) { - procargs->number = procargs->size = 0; + procargs->number = 0; return SIGAR_OK; } else if (pinfo->pr_dmodel != PR_MODEL_NATIVE) { From 4b9e309c8bdebe903a5e081fe7963e7a546a8680 Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Wed, 21 Apr 2010 13:51:12 -0700 Subject: [PATCH 05/10] close_mib2 in sigar_os_close --- src/os/solaris/solaris_sigar.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/os/solaris/solaris_sigar.c b/src/os/solaris/solaris_sigar.c index bcb38057..48617c1b 100644 --- a/src/os/solaris/solaris_sigar.c +++ b/src/os/solaris/solaris_sigar.c @@ -151,6 +151,9 @@ int sigar_os_open(sigar_t **sig) int sigar_os_close(sigar_t *sigar) { kstat_close(sigar->kc); + if (sigar->mib2.sd != -1) { + close_mib2(&sigar->mib2); + } if (sigar->ks.lcpu) { free(sigar->ks.cpu); From 647f3d32c3e1318be406544419f9ecc4ff4f6815 Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Wed, 21 Apr 2010 13:54:03 -0700 Subject: [PATCH 06/10] apply value_free to PTQL_VALUE_TYPE_ANY --- src/sigar_ptql.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sigar_ptql.c b/src/sigar_ptql.c index 4fc560d4..d03eb546 100644 --- a/src/sigar_ptql.c +++ b/src/sigar_ptql.c @@ -546,7 +546,8 @@ static int ptql_branch_list_destroy(ptql_branch_list_t *branches) } if (branch->lookup && - (branch->lookup->type == PTQL_VALUE_TYPE_STR) && + ((branch->lookup->type == PTQL_VALUE_TYPE_STR) || + (branch->lookup->type == PTQL_VALUE_TYPE_ANY)) && !(branch->op_flags & PTQL_OP_FLAG_REF)) { if (branch->value.str) { From 8cd05ddc640d56cec1d46bcd957bc56621278c16 Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Wed, 21 Apr 2010 13:55:01 -0700 Subject: [PATCH 07/10] mv ProcessQueryFactory.clear calls to tearDown() --- .../java/src/org/hyperic/sigar/test/TestPTQL.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/bindings/java/src/org/hyperic/sigar/test/TestPTQL.java b/bindings/java/src/org/hyperic/sigar/test/TestPTQL.java index 7f504169..067c5461 100644 --- a/bindings/java/src/org/hyperic/sigar/test/TestPTQL.java +++ b/bindings/java/src/org/hyperic/sigar/test/TestPTQL.java @@ -116,9 +116,18 @@ public class TestPTQL extends SigarTestCase { public TestPTQL(String name) { super(name); + } + + protected void setUp() throws Exception { + super.setUp(); this.qf = new ProcessQueryFactory(); } + protected void tearDown() throws Exception { + super.tearDown(); + this.qf.clear(); + } + private int runQuery(Sigar sigar, String qs) throws MalformedQueryException, SigarException { @@ -174,7 +183,6 @@ public class TestPTQL extends SigarTestCase { assertTrue(qs, runQuery(sigar, qs) >= 0); } - this.qf.clear(); } public void testValidRegexQueries() throws Exception { @@ -183,7 +191,6 @@ public class TestPTQL extends SigarTestCase { assertTrue(qs, runQuery(getSigar(), qs) >= 0); } - this.qf.clear(); } public void testMalformedQueries() throws Exception { @@ -197,7 +204,6 @@ public class TestPTQL extends SigarTestCase { assertTrue(qs + " Malformed", true); } } - this.qf.clear(); } public void testSelf() throws Exception { From a5dacd4d03b61998fa58160a8ca627cc3ca9445d Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Wed, 21 Apr 2010 13:56:25 -0700 Subject: [PATCH 08/10] clear ProcessQueryFactory and Humidor instances on shutdown --- bindings/java/src/org/hyperic/sigar/test/SigarTestCase.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bindings/java/src/org/hyperic/sigar/test/SigarTestCase.java b/bindings/java/src/org/hyperic/sigar/test/SigarTestCase.java index e31b3fe2..3d0253a1 100644 --- a/bindings/java/src/org/hyperic/sigar/test/SigarTestCase.java +++ b/bindings/java/src/org/hyperic/sigar/test/SigarTestCase.java @@ -27,7 +27,9 @@ import java.util.Properties; import junit.framework.TestCase; +import org.hyperic.sigar.Humidor; import org.hyperic.sigar.Sigar; +import org.hyperic.sigar.ptql.ProcessQueryFactory; //helper to add optional tracing. public abstract class SigarTestCase extends TestCase { @@ -80,6 +82,8 @@ public abstract class SigarTestCase extends TestCase { sigar.close(); sigar = null; } + ProcessQueryFactory.getInstance().clear(); + Humidor.getInstance().close(); } public Properties getProperties() { From b3078dca919d5341dcc8e2367db28a5203204e06 Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Wed, 21 Apr 2010 15:02:01 -0700 Subject: [PATCH 09/10] bring back closeSigar() call in shutdown (commented out in cd42290) --- .../java/src/org/hyperic/sigar/cmd/Shell.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/bindings/java/src/org/hyperic/sigar/cmd/Shell.java b/bindings/java/src/org/hyperic/sigar/cmd/Shell.java index ee0b9069..2314c2a4 100644 --- a/bindings/java/src/org/hyperic/sigar/cmd/Shell.java +++ b/bindings/java/src/org/hyperic/sigar/cmd/Shell.java @@ -199,9 +199,18 @@ public class Shell extends ShellBase { public void shutdown() { this.sigar.close(); - //avoid possible Class Not Found: junit/framework/TestCase - if (System.getProperty("jni.dmalloc") != null) { - //org.hyperic.sigar.test.SigarTestCase.closeSigar(); //shutup dmalloc + //cleanup for dmalloc + //using reflection incase junit.jar is not present + try { + //SigarTestCase.closeSigar(); + Class.forName("org.hyperic.sigar.test.SigarTestCase"). + getMethod("closeSigar", new Class[0]).invoke(null, new Object[0]); + } catch (ClassNotFoundException e) { + //SigarTestCase.java not compiled w/o junit.jar + } catch (Exception e) { + e.printStackTrace(); + } catch (NoClassDefFoundError e) { + //avoiding possible Class Not Found: junit/framework/TestCase } super.shutdown(); } From 30e8d0e2c1d7f148e1f7e189197e66f9fa127a4e Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Wed, 21 Apr 2010 15:20:05 -0700 Subject: [PATCH 10/10] fix ProcCpu.getPercent assertion per SIGAR-145 --- bindings/java/src/org/hyperic/sigar/test/TestProcTime.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bindings/java/src/org/hyperic/sigar/test/TestProcTime.java b/bindings/java/src/org/hyperic/sigar/test/TestProcTime.java index d0ce5681..c541e62a 100644 --- a/bindings/java/src/org/hyperic/sigar/test/TestProcTime.java +++ b/bindings/java/src/org/hyperic/sigar/test/TestProcTime.java @@ -54,6 +54,7 @@ public class TestProcTime extends SigarTestCase { double value = procTime.getPercent() * 100.0; traceln("Percent=" + value); assertTrue(value >= 0.0); - assertTrue(value <= 100.0); + int ncpu = sigar.getCpuList().length; + assertTrue(value <= (100.0 * ncpu)); //SIGAR-145 Irix mode } }