From 77df8631449747be290fe395eedbc45aedb29257 Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Mon, 10 Oct 2005 20:15:12 +0000 Subject: [PATCH] sigar_t already has a handle to advapi32.dll, use it --- bindings/java/src/jni/javasigar.c | 40 +++++++++---------- .../src/net/hyperic/sigar/test/TestPTQL.java | 1 + 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/bindings/java/src/jni/javasigar.c b/bindings/java/src/jni/javasigar.c index d5077d67..4f4a0e2d 100644 --- a/bindings/java/src/jni/javasigar.c +++ b/bindings/java/src/jni/javasigar.c @@ -2,6 +2,8 @@ #include "sigar.h" #include "sigar_fileinfo.h" #include "sigar_log.h" +#include "sigar_private.h" +#include "sigar_os.h" #include @@ -1184,6 +1186,11 @@ JNIEXPORT jlong SIGAR_JNI(Sigar_getServicePid) SC_HANDLE mgr; dSIGAR(0); + if (!sigar->adv_handle) { + sigar_throw_notimpl(env, "advapi32.dll not available"); + return 0; + } + name = JENV->GetStringUTFChars(env, jname, &is_copy); mgr = OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, @@ -1195,28 +1202,19 @@ JNIEXPORT jlong SIGAR_JNI(Sigar_getServicePid) if (svc) { SERVICE_STATUS_PROCESS status; DWORD bytes; - HANDLE lib; + QueryServiceStatusExFunc status_query = + (QueryServiceStatusExFunc) + GetProcAddress(sigar->adv_handle, + "QueryServiceStatusEx"); - if ((lib = LoadLibrary("advapi32.dll"))) { - QueryServiceStatusExFunc status_query; - status_query = - (QueryServiceStatusExFunc) - GetProcAddress(lib, "QueryServiceStatusEx"); - - if (!status_query) { - err = SIGAR_ENOTIMPL; - } - else if (status_query(svc, - SC_STATUS_PROCESS_INFO, - (LPBYTE)&status, sizeof(status), &bytes)) - { - pid = status.dwProcessId; - } - else { - err = GetLastError(); - } - - FreeLibrary(lib); + if (!status_query) { + err = SIGAR_ENOTIMPL; + } + else if (status_query(svc, + SC_STATUS_PROCESS_INFO, + (LPBYTE)&status, sizeof(status), &bytes)) + { + pid = status.dwProcessId; } else { err = GetLastError(); diff --git a/bindings/java/src/net/hyperic/sigar/test/TestPTQL.java b/bindings/java/src/net/hyperic/sigar/test/TestPTQL.java index b135a1b8..6b9424fa 100644 --- a/bindings/java/src/net/hyperic/sigar/test/TestPTQL.java +++ b/bindings/java/src/net/hyperic/sigar/test/TestPTQL.java @@ -45,6 +45,7 @@ public class TestPTQL extends SigarTestCase { "Pid.PidFile.eq=pid.file", "Pid.Pid.eq=1", "Pid.Service.eq=Eventlog", + "Pid.Service.eq=NOSUCHSERVICE", "Pid.Service.eq=Hyperic HQ Agent", "State.Name.eq=java,Pid.Pid.ne=$$", //all java procs cept this one "Cpu.Percent.ge=0.2",