From 70732b0ca4b8f9e7355639800110f3b7054b8ce0 Mon Sep 17 00:00:00 2001 From: Doug Lyons Date: Tue, 10 Jun 2025 18:04:11 -0500 Subject: [PATCH] [TASKMGR] Work around memory leak in performance tab of taskmgr (#8017) * [TASKMGR] Work around Taskmgr memory leak by changing heap allocation methodology. CORE-18014 --- base/applications/taskmgr/perfdata.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/base/applications/taskmgr/perfdata.c b/base/applications/taskmgr/perfdata.c index 6ca1a76581b..2cc101bf9a4 100644 --- a/base/applications/taskmgr/perfdata.c +++ b/base/applications/taskmgr/perfdata.c @@ -64,7 +64,14 @@ BOOL PerfDataInitialize(void) * Create the SYSTEM Sid */ AllocateAndInitializeSid(&NtSidAuthority, 1, SECURITY_LOCAL_SYSTEM_RID, 0, 0, 0, 0, 0, 0, 0, &SystemUserSid); - return TRUE; + + /* + * Set up global info storage + */ + SystemProcessorTimeInfo = (PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)HeapAlloc(GetProcessHeap(), + 0, sizeof(*SystemProcessorTimeInfo) * SystemBasicInfo.NumberOfProcessors); + + return SystemProcessorTimeInfo != NULL; } void PerfDataUninitialize(void) @@ -247,10 +254,12 @@ void PerfDataRefresh(void) /* * Save system processor time info */ - if (SystemProcessorTimeInfo) { - HeapFree(GetProcessHeap(), 0, SystemProcessorTimeInfo); + memcpy(SystemProcessorTimeInfo, SysProcessorTimeInfo, + sizeof(*SystemProcessorTimeInfo) * SystemBasicInfo.NumberOfProcessors); + + if (SysProcessorTimeInfo) { + HeapFree(GetProcessHeap(), 0, SysProcessorTimeInfo); } - SystemProcessorTimeInfo = SysProcessorTimeInfo; /* * Save system handle info