[PATCH 4/4] kernel32: Update available virtual memory size in GlobalMemoryStatusEx().
Akihiro Sagawa
sagawa.aki at gmail.com
Sun Jun 4 08:37:39 CDT 2017
Signed-off-by: Akihiro Sagawa <sagawa.aki at gmail.com>
---
dlls/kernel32/heap.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/dlls/kernel32/heap.c b/dlls/kernel32/heap.c
index fd6414a..5739f3b 100644
--- a/dlls/kernel32/heap.c
+++ b/dlls/kernel32/heap.c
@@ -1154,6 +1154,8 @@ BOOL WINAPI GlobalMemoryStatusEx( LPMEMORYSTATUSEX lpmemex )
static MEMORYSTATUSEX cached_memstatus;
static int cache_lastchecked = 0;
SYSTEM_INFO si;
+ VM_COUNTERS vmi;
+ NTSTATUS ret;
#ifdef linux
FILE *f;
#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__APPLE__)
@@ -1185,7 +1187,7 @@ BOOL WINAPI GlobalMemoryStatusEx( LPMEMORYSTATUSEX lpmemex )
if (time(NULL)==cache_lastchecked) {
*lpmemex = cached_memstatus;
- return TRUE;
+ goto fill_virtual_avail;
}
cache_lastchecked = time(NULL);
@@ -1340,8 +1342,6 @@ BOOL WINAPI GlobalMemoryStatusEx( LPMEMORYSTATUSEX lpmemex )
/* FIXME: should do something for other systems */
GetSystemInfo(&si);
lpmemex->ullTotalVirtual = (ULONG_PTR)si.lpMaximumApplicationAddress-(ULONG_PTR)si.lpMinimumApplicationAddress;
- /* FIXME: we should track down all the already allocated VM pages and subtract them, for now arbitrarily remove 64KB so that it matches NT */
- lpmemex->ullAvailVirtual = lpmemex->ullTotalVirtual-64*1024;
/* MSDN says about AvailExtendedVirtual: Size of unreserved and uncommitted
memory in the extended portion of the virtual address space of the calling
@@ -1352,6 +1352,13 @@ BOOL WINAPI GlobalMemoryStatusEx( LPMEMORYSTATUSEX lpmemex )
cached_memstatus = *lpmemex;
+fill_virtual_avail:
+ ret = NtQueryInformationProcess(GetCurrentProcess(), ProcessVmCounters, &vmi, sizeof(vmi), NULL);
+ if (!ret && lpmemex->ullTotalVirtual > vmi.VirtualSize)
+ lpmemex->ullAvailVirtual = lpmemex->ullTotalVirtual - vmi.VirtualSize;
+ else
+ lpmemex->ullAvailVirtual = lpmemex->ullTotalVirtual - 64*1024;
+
TRACE_(globalmem)("<-- LPMEMORYSTATUSEX: dwLength %d, dwMemoryLoad %d, ullTotalPhys %s, ullAvailPhys %s,"
" ullTotalPageFile %s, ullAvailPageFile %s, ullTotalVirtual %s, ullAvailVirtual %s\n",
lpmemex->dwLength, lpmemex->dwMemoryLoad, wine_dbgstr_longlong(lpmemex->ullTotalPhys),
--
2.7.4
More information about the wine-patches
mailing list