diff --git "a/base/applications/taskmgr/perfdata.c" "b/base/applications/taskmgr/perfdata.c" index 6ca1a76581b..10dff8131bd 100644 --- "a/base/applications/taskmgr/perfdata.c" +++ "b/base/applications/taskmgr/perfdata.c" @@ -30,7 +30,8 @@ SYSTEM_PERFORMANCE_INFORMATION SystemPerfInfo; SYSTEM_BASIC_INFORMATION SystemBasicInfo; SYSTEM_FILECACHE_INFORMATION SystemCacheInfo; ULONG SystemNumberOfHandles; -PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION SystemProcessorTimeInfo = NULL; +/* Handle up to 32 processors */ +SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION SystemProcessorTimeInfo[32] = { 0 }; PSID SystemUserSid = NULL; PCMD_LINE_CACHE global_cache = NULL; @@ -91,10 +92,6 @@ void PerfDataUninitialize(void) pCur = pCur->Flink; HeapFree(GetProcessHeap(), 0, pEntry); } - - if (SystemProcessorTimeInfo) { - HeapFree(GetProcessHeap(), 0, SystemProcessorTimeInfo); - } } static void SidToUserName(PSID Sid, LPWSTR szBuffer, DWORD BufferSize) @@ -247,15 +244,15 @@ void PerfDataRefresh(void) /* * Save system processor time info */ - if (SystemProcessorTimeInfo) { - HeapFree(GetProcessHeap(), 0, SystemProcessorTimeInfo); - } - SystemProcessorTimeInfo = SysProcessorTimeInfo; + if (SystemBasicInfo.NumberOfProcessors <= 32) + memcpy(&SystemProcessorTimeInfo, &SysProcessorTimeInfo, + sizeof(SystemProcessorTimeInfo) * SystemBasicInfo.NumberOfProcessors); /* * Save system handle info */ SystemNumberOfHandles = SysHandleInfoData.NumberOfHandles; + SystemNumberOfHandles = SysHandleInfoData.NumberOfHandles; // HACK: Needed or we leak memory for (CurrentKernelTime=0, Idx=0; Idx<(ULONG)SystemBasicInfo.NumberOfProcessors; Idx++) { CurrentKernelTime += Li2Double(SystemProcessorTimeInfo[Idx].KernelTime);