Some applications call GlobalMemoryStatus() very often. Cache the
results of the call for 1 second (spotted by Corel).
diff --git a/memory/global.c b/memory/global.c
index 5cecdf4..302a7e1 100644
--- a/memory/global.c
+++ b/memory/global.c
@@ -7,6 +7,7 @@
#include <sys/types.h>
#include <stdlib.h>
+#include <time.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
@@ -1458,8 +1459,18 @@
VOID WINAPI GlobalMemoryStatus(
LPMEMORYSTATUS lpmem
) {
+ static MEMORYSTATUS cached_memstatus;
+ static int cache_lastchecked = 0;
+ FILE *f;
+
+ if (time(NULL)==cache_lastchecked) {
+ memcpy(lpmem,&cached_memstatus,sizeof(MEMORYSTATUS));
+ return;
+ }
+ cache_lastchecked = time(NULL);
+
#ifdef linux
- FILE *f = fopen( "/proc/meminfo", "r" );
+ f = fopen( "/proc/meminfo", "r" );
if (f)
{
char buffer[256];