summaryrefslogtreecommitdiff
path: root/src/mongo/util/processinfo_win32.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/util/processinfo_win32.cpp')
-rw-r--r--src/mongo/util/processinfo_win32.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/mongo/util/processinfo_win32.cpp b/src/mongo/util/processinfo_win32.cpp
index 83998831594..3f42eb12698 100644
--- a/src/mongo/util/processinfo_win32.cpp
+++ b/src/mongo/util/processinfo_win32.cpp
@@ -49,8 +49,10 @@ namespace mongo {
}
supported = false;
}
- } psapiGlobal;
-
+ };
+
+ static PsApiInit* psapiGlobal = NULL;
+
int _wconvertmtos( SIZE_T s ) {
return (int)( s / ( 1024 * 1024 ) );
}
@@ -189,6 +191,9 @@ namespace mongo {
osVersion = verstr.str();
hasNuma = checkNumaEnabled();
_extraStats = bExtra.obj();
+ if (psapiGlobal == NULL) {
+ psapiGlobal = new PsApiInit();
+ }
}
@@ -197,7 +202,7 @@ namespace mongo {
}
bool ProcessInfo::blockCheckSupported() {
- return psapiGlobal.supported;
+ return psapiGlobal->supported;
}
bool ProcessInfo::blockInMemory(const void* start) {
@@ -217,7 +222,7 @@ namespace mongo {
#endif
PSAPI_WORKING_SET_EX_INFORMATION wsinfo;
wsinfo.VirtualAddress = const_cast<void*>(start);
- BOOL result = psapiGlobal.QueryWSEx( GetCurrentProcess(), &wsinfo, sizeof(wsinfo) );
+ BOOL result = psapiGlobal->QueryWSEx( GetCurrentProcess(), &wsinfo, sizeof(wsinfo) );
if ( result )
if ( wsinfo.VirtualAttributes.Valid )
return true;
@@ -235,7 +240,7 @@ namespace mongo {
reinterpret_cast<unsigned long long>(startOfFirstPage) + i * getPageSize());
}
- BOOL result = psapiGlobal.QueryWSEx(GetCurrentProcess(),
+ BOOL result = psapiGlobal->QueryWSEx(GetCurrentProcess(),
wsinfo.get(),
sizeof(PSAPI_WORKING_SET_EX_INFORMATION) * numPages);