[PATCH 2/2] ntdll: Always fill PagefileUsage counter with a nonzero value on Linux.

Alex Henrie alexhenrie24 at gmail.com
Tue May 16 21:32:44 CDT 2017


For https://bugs.winehq.org/show_bug.cgi?id=5657

Testing revealed that this value is always greater than 0 even if the
pagefile is disabled. MSDN says that PagefileUsage is the "commit
charge", which is the amount of memory that could potentially be stored
in the pagefile assuming that the pagefile is enabled.

Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
---
 dlls/ntdll/process.c    | 5 ++++-
 dlls/ntdll/tests/info.c | 2 ++
 server/process.c        | 5 ++++-
 server/protocol.def     | 4 ++--
 4 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/dlls/ntdll/process.c b/dlls/ntdll/process.c
index 8d660300aa..f615ce2fea 100644
--- a/dlls/ntdll/process.c
+++ b/dlls/ntdll/process.c
@@ -152,9 +152,12 @@ static void fill_VM_COUNTERS(VM_COUNTERS* pvmi)
             pvmi->PeakWorkingSetSize = (ULONG64)value * 1024;
         else if (sscanf(line, "VmRSS: %lu", &value))
             pvmi->WorkingSetSize = (ULONG64)value * 1024;
+        else if (sscanf(line, "RssAnon: %lu", &value))
+            pvmi->PagefileUsage += (ULONG64)value * 1024;
         else if (sscanf(line, "VmSwap: %lu", &value))
-            pvmi->PeakPagefileUsage = pvmi->PagefileUsage = (ULONG64)value * 1024;
+            pvmi->PagefileUsage += (ULONG64)value * 1024;
     }
+    pvmi->PeakPagefileUsage = pvmi->PagefileUsage;
 
     fclose(f);
 }
diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c
index 9fda2d5e35..f1de20698a 100644
--- a/dlls/ntdll/tests/info.c
+++ b/dlls/ntdll/tests/info.c
@@ -1096,6 +1096,7 @@ static void test_query_process_vm(void)
     /* Check if we have some return values */
     dump_vm_counters("VM counters for GetCurrentProcess", &pvi);
     ok( pvi.WorkingSetSize > 0, "Expected a WorkingSetSize > 0\n");
+    ok( pvi.PagefileUsage > 0, "Expected a PagefileUsage > 0\n");
 
     process = OpenProcess(PROCESS_VM_READ, FALSE, GetCurrentProcessId());
     status = pNtQueryInformationProcess(process, ProcessVmCounters, &pvi, sizeof(pvi), NULL);
@@ -1115,6 +1116,7 @@ static void test_query_process_vm(void)
     /* Check if we have some return values */
     dump_vm_counters("VM counters for GetCurrentProcessId", &pvi);
     ok( pvi.WorkingSetSize > 0, "Expected a WorkingSetSize > 0\n");
+    ok( pvi.PagefileUsage > 0, "Expected a PagefileUsage > 0\n");
 
     CloseHandle(process);
 }
diff --git a/server/process.c b/server/process.c
index 3e40c9eeaf..5eabbbef8e 100644
--- a/server/process.c
+++ b/server/process.c
@@ -1397,9 +1397,12 @@ DECL_HANDLER(get_process_vm_counters)
                     reply->peak_working_set_size = (mem_size_t)value * 1024;
                 else if (sscanf( line, "VmRSS: %lu", &value ))
                     reply->working_set_size = (mem_size_t)value * 1024;
+                else if (sscanf( line, "RssAnon: %lu", &value ))
+                    reply->pagefile_usage += (mem_size_t)value * 1024;
                 else if (sscanf( line, "VmSwap: %lu", &value ))
-                    reply->peak_pagefile_usage = reply->pagefile_usage = (mem_size_t)value * 1024;
+                    reply->pagefile_usage += (mem_size_t)value * 1024;
             }
+            reply->peak_pagefile_usage = reply->pagefile_usage;
             fclose( f );
         }
         else set_error( STATUS_ACCESS_DENIED );
diff --git a/server/protocol.def b/server/protocol.def
index 0a9d258fa6..6cafa70831 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -853,8 +853,8 @@ struct rawinput_device
     mem_size_t virtual_size;                    /* virtual memory in bytes */
     mem_size_t peak_working_set_size;           /* peak real memory in bytes */
     mem_size_t working_set_size;                /* real memory in bytes */
-    mem_size_t pagefile_usage;                  /* swapped-out memory in bytes */
-    mem_size_t peak_pagefile_usage;             /* peak swapped-out memory in bytes */
+    mem_size_t pagefile_usage;                  /* commit charge in bytes */
+    mem_size_t peak_pagefile_usage;             /* peak commit charge in bytes */
 @END
 
 
-- 
2.13.0




More information about the wine-patches mailing list