[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
	
	Block a user