diff options
Diffstat (limited to 'src/mongo/util/processinfo_win32.cpp')
| -rw-r--r-- | src/mongo/util/processinfo_win32.cpp | 15 |
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); |
