[SIGAR-8] Change win32 mem_get to use GlobalMemoryStatusEx
This commit is contained in:
parent
ea4f9c7ee4
commit
4f75602888
|
@ -1,3 +1,7 @@
|
||||||
|
2006-07-07 Doug MacEachern <dougm@hyperic.net>
|
||||||
|
|
||||||
|
* [SIGAR-8] Change win32 mem_get to use GlobalMemoryStatusEx
|
||||||
|
|
||||||
2006-06-30 Doug MacEachern <dougm@hyperic.com>
|
2006-06-30 Doug MacEachern <dougm@hyperic.com>
|
||||||
|
|
||||||
* Remove mem.shared, gone in Linux 2.6 and which only left Solaris and Win32
|
* Remove mem.shared, gone in Linux 2.6 and which only left Solaris and Win32
|
||||||
|
|
|
@ -192,6 +192,19 @@ typedef struct _WINSTATION_INFO {
|
||||||
|
|
||||||
/* end wtsapi32.h */
|
/* end wtsapi32.h */
|
||||||
|
|
||||||
|
/* from winbase.h not in vs6.0 */
|
||||||
|
typedef struct {
|
||||||
|
DWORD dwLength;
|
||||||
|
DWORD dwMemoryLoad;
|
||||||
|
DWORDLONG ullTotalPhys;
|
||||||
|
DWORDLONG ullAvailPhys;
|
||||||
|
DWORDLONG ullTotalPageFile;
|
||||||
|
DWORDLONG ullAvailPageFile;
|
||||||
|
DWORDLONG ullTotalVirtual;
|
||||||
|
DWORDLONG ullAvailVirtual;
|
||||||
|
DWORDLONG ullAvailExtendedVirtual;
|
||||||
|
} MEMORYSTATUSEX;
|
||||||
|
|
||||||
#include <iprtrmib.h>
|
#include <iprtrmib.h>
|
||||||
|
|
||||||
/* undocumented structures */
|
/* undocumented structures */
|
||||||
|
@ -349,6 +362,9 @@ typedef BOOLEAN (CALLBACK *winsta_query_info)(HANDLE,
|
||||||
ULONG,
|
ULONG,
|
||||||
PULONG);
|
PULONG);
|
||||||
|
|
||||||
|
/* kernel32.dll */
|
||||||
|
typedef BOOL (CALLBACK *kernel_memory_status)(MEMORYSTATUSEX *);
|
||||||
|
|
||||||
#define SIGAR_DLLFUNC(api, name) \
|
#define SIGAR_DLLFUNC(api, name) \
|
||||||
struct { \
|
struct { \
|
||||||
const char *name; \
|
const char *name; \
|
||||||
|
@ -415,6 +431,14 @@ typedef struct {
|
||||||
sigar_dll_func_t end;
|
sigar_dll_func_t end;
|
||||||
} sigar_winsta_t;
|
} sigar_winsta_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
sigar_dll_handle_t handle;
|
||||||
|
|
||||||
|
SIGAR_DLLFUNC(kernel, memory_status);
|
||||||
|
|
||||||
|
sigar_dll_func_t end;
|
||||||
|
} sigar_kernel_t;
|
||||||
|
|
||||||
struct sigar_t {
|
struct sigar_t {
|
||||||
SIGAR_T_BASE;
|
SIGAR_T_BASE;
|
||||||
char *machine;
|
char *machine;
|
||||||
|
@ -429,6 +453,7 @@ struct sigar_t {
|
||||||
sigar_ntdll_t ntdll;
|
sigar_ntdll_t ntdll;
|
||||||
sigar_psapi_t psapi;
|
sigar_psapi_t psapi;
|
||||||
sigar_winsta_t winsta;
|
sigar_winsta_t winsta;
|
||||||
|
sigar_kernel_t kernel;
|
||||||
sigar_win32_pinfo_t pinfo;
|
sigar_win32_pinfo_t pinfo;
|
||||||
WORD ws_version;
|
WORD ws_version;
|
||||||
int ws_error;
|
int ws_error;
|
||||||
|
|
|
@ -223,6 +223,13 @@ static sigar_psapi_t sigar_winsta = {
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static sigar_psapi_t sigar_kernel = {
|
||||||
|
"kernel32.dll",
|
||||||
|
NULL,
|
||||||
|
{ "GlobalMemoryStatusEx", NULL },
|
||||||
|
{ NULL, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
#define DLLMOD_COPY(name) \
|
#define DLLMOD_COPY(name) \
|
||||||
memcpy(&(sigar->##name), &sigar_##name, sizeof(sigar_##name))
|
memcpy(&(sigar->##name), &sigar_##name, sizeof(sigar_##name))
|
||||||
|
|
||||||
|
@ -349,6 +356,7 @@ int sigar_os_open(sigar_t **sigar_ptr)
|
||||||
DLLMOD_COPY(ntdll);
|
DLLMOD_COPY(ntdll);
|
||||||
DLLMOD_COPY(psapi);
|
DLLMOD_COPY(psapi);
|
||||||
DLLMOD_COPY(winsta);
|
DLLMOD_COPY(winsta);
|
||||||
|
DLLMOD_COPY(kernel);
|
||||||
|
|
||||||
sigar->log_level = -1; /* else below segfaults */
|
sigar->log_level = -1; /* else below segfaults */
|
||||||
/* XXX init early for use by javasigar.c */
|
/* XXX init early for use by javasigar.c */
|
||||||
|
@ -374,6 +382,7 @@ int sigar_os_close(sigar_t *sigar)
|
||||||
DLLMOD_FREE(ntdll);
|
DLLMOD_FREE(ntdll);
|
||||||
DLLMOD_FREE(psapi);
|
DLLMOD_FREE(psapi);
|
||||||
DLLMOD_FREE(winsta);
|
DLLMOD_FREE(winsta);
|
||||||
|
DLLMOD_FREE(kernel);
|
||||||
|
|
||||||
if (sigar->perfbuf) {
|
if (sigar->perfbuf) {
|
||||||
free(sigar->perfbuf);
|
free(sigar->perfbuf);
|
||||||
|
@ -404,14 +413,32 @@ char *sigar_os_error_string(sigar_t *sigar, int err)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define sigar_GlobalMemoryStatusEx \
|
||||||
|
sigar->kernel.memory_status.func
|
||||||
|
|
||||||
SIGAR_DECLARE(int) sigar_mem_get(sigar_t *sigar, sigar_mem_t *mem)
|
SIGAR_DECLARE(int) sigar_mem_get(sigar_t *sigar, sigar_mem_t *mem)
|
||||||
{
|
{
|
||||||
|
DLLMOD_INIT(kernel, TRUE);
|
||||||
|
|
||||||
|
if (sigar_GlobalMemoryStatusEx) {
|
||||||
|
MEMORYSTATUSEX memstat;
|
||||||
|
|
||||||
|
memstat.dwLength = sizeof(memstat);
|
||||||
|
|
||||||
|
if (!sigar_GlobalMemoryStatusEx(&memstat)) {
|
||||||
|
return GetLastError();
|
||||||
|
}
|
||||||
|
|
||||||
|
mem->total = memstat.ullTotalPhys;
|
||||||
|
mem->free = memstat.ullAvailPhys;
|
||||||
|
}
|
||||||
|
else {
|
||||||
MEMORYSTATUS memstat;
|
MEMORYSTATUS memstat;
|
||||||
|
|
||||||
GlobalMemoryStatus(&memstat);
|
GlobalMemoryStatus(&memstat);
|
||||||
|
|
||||||
mem->total = memstat.dwTotalPhys;
|
mem->total = memstat.dwTotalPhys;
|
||||||
mem->free = memstat.dwAvailPhys;
|
mem->free = memstat.dwAvailPhys;
|
||||||
|
}
|
||||||
|
|
||||||
mem->used = mem->total - mem->free;
|
mem->used = mem->total - mem->free;
|
||||||
|
|
||||||
sigar_mem_calc_ram(sigar, mem);
|
sigar_mem_calc_ram(sigar, mem);
|
||||||
|
|
Loading…
Reference in New Issue