diff options
author | Andy Ayers <andya@microsoft.com> | 2016-04-14 18:49:25 -0700 |
---|---|---|
committer | Andy Ayers <andya@microsoft.com> | 2016-04-15 16:47:32 -0700 |
commit | 00269b869058d414dfa9d116105b5e5e7a660853 (patch) | |
tree | 0740011e80f7a738486590a39395d4492198d6ec /src | |
parent | b0d613888c6c1b78add096a0832ba6ae7928f56c (diff) | |
download | coreclr-00269b869058d414dfa9d116105b5e5e7a660853.tar.gz coreclr-00269b869058d414dfa9d116105b5e5e7a660853.tar.bz2 coreclr-00269b869058d414dfa9d116105b5e5e7a660853.zip |
Fix a segfault in perf map generation
Make sure instance vars get initialized to nullptr.
Diffstat (limited to 'src')
-rw-r--r-- | src/vm/perfinfo.cpp | 13 | ||||
-rw-r--r-- | src/vm/perfmap.cpp | 36 |
2 files changed, 26 insertions, 23 deletions
diff --git a/src/vm/perfinfo.cpp b/src/vm/perfinfo.cpp index 3f85f44ebc..3c8841b010 100644 --- a/src/vm/perfinfo.cpp +++ b/src/vm/perfinfo.cpp @@ -12,6 +12,7 @@ #include "pal.h" PerfInfo::PerfInfo(int pid) + : m_Stream(nullptr) { LIMITED_METHOD_CONTRACT; @@ -34,8 +35,8 @@ void PerfInfo::LogImage(PEFile* pFile, WCHAR* guid) THROWS; GC_NOTRIGGER; MODE_PREEMPTIVE; - PRECONDITION(pFile != NULL); - PRECONDITION(guid != NULL); + PRECONDITION(pFile != nullptr); + PRECONDITION(guid != nullptr); } CONTRACTL_END; SString value; @@ -59,7 +60,7 @@ void PerfInfo::WriteLine(SString& type, SString& value) MODE_PREEMPTIVE; } CONTRACTL_END; - if (m_Stream == NULL) + if (m_Stream == nullptr) { return; } @@ -92,13 +93,13 @@ void PerfInfo::OpenFile(SString& path) m_Stream = new (nothrow) CFileStream(); - if (m_Stream != NULL) + if (m_Stream != nullptr) { HRESULT hr = m_Stream->OpenForWrite(path.GetUnicode()); if (FAILED(hr)) { delete m_Stream; - m_Stream = NULL; + m_Stream = nullptr; } } } @@ -108,7 +109,7 @@ PerfInfo::~PerfInfo() LIMITED_METHOD_CONTRACT; delete m_Stream; - m_Stream = NULL; + m_Stream = nullptr; } diff --git a/src/vm/perfmap.cpp b/src/vm/perfmap.cpp index 4e04ca7d43..3cfe4adc7e 100644 --- a/src/vm/perfmap.cpp +++ b/src/vm/perfmap.cpp @@ -12,7 +12,7 @@ #include "perfinfo.h" #include "pal.h" -PerfMap * PerfMap::s_Current = NULL; +PerfMap * PerfMap::s_Current = nullptr; // Initialize the map for the process - called from EEStartupHelper. void PerfMap::Initialize() @@ -35,10 +35,10 @@ void PerfMap::Destroy() { LIMITED_METHOD_CONTRACT; - if (s_Current != NULL) + if (s_Current != nullptr) { delete s_Current; - s_Current = NULL; + s_Current = nullptr; } } @@ -69,6 +69,8 @@ PerfMap::PerfMap(int pid) // Construct a new map without a specified file name. // Used for offline creation of NGEN map files. PerfMap::PerfMap() + : m_FileStream(nullptr) + , m_PerfInfo(nullptr) { LIMITED_METHOD_CONTRACT; } @@ -79,10 +81,10 @@ PerfMap::~PerfMap() LIMITED_METHOD_CONTRACT; delete m_FileStream; - m_FileStream = NULL; + m_FileStream = nullptr; delete m_PerfInfo; - m_PerfInfo = NULL; + m_PerfInfo = nullptr; } // Open the specified destination map file. @@ -92,13 +94,13 @@ void PerfMap::OpenFile(SString& path) // Open the file stream. m_FileStream = new (nothrow) CFileStream(); - if(m_FileStream != NULL) + if(m_FileStream != nullptr) { HRESULT hr = m_FileStream->OpenForWrite(path.GetUnicode()); if(FAILED(hr)) { delete m_FileStream; - m_FileStream = NULL; + m_FileStream = nullptr; } } } @@ -136,12 +138,12 @@ void PerfMap::LogMethod(MethodDesc * pMethod, PCODE pCode, size_t codeSize) THROWS; GC_NOTRIGGER; MODE_PREEMPTIVE; - PRECONDITION(pMethod != NULL); - PRECONDITION(pCode != NULL); + PRECONDITION(pMethod != nullptr); + PRECONDITION(pCode != nullptr); PRECONDITION(codeSize > 0); } CONTRACTL_END; - if (m_FileStream == NULL || m_ErrorEncountered) + if (m_FileStream == nullptr || m_ErrorEncountered) { // A failure occurred, do not log. return; @@ -168,7 +170,7 @@ void PerfMap::LogMethod(MethodDesc * pMethod, PCODE pCode, size_t codeSize) void PerfMap::LogImageLoad(PEFile * pFile) { - if (s_Current != NULL) + if (s_Current != nullptr) { s_Current->LogImage(pFile); } @@ -181,11 +183,11 @@ void PerfMap::LogImage(PEFile * pFile) THROWS; GC_NOTRIGGER; MODE_PREEMPTIVE; - PRECONDITION(pFile != NULL); + PRECONDITION(pFile != nullptr); } CONTRACTL_END; - if (m_FileStream == NULL || m_ErrorEncountered) + if (m_FileStream == nullptr || m_ErrorEncountered) { // A failure occurred, do not log. return; @@ -207,7 +209,7 @@ void PerfMap::LogJITCompiledMethod(MethodDesc * pMethod, PCODE pCode, size_t cod { LIMITED_METHOD_CONTRACT; - if (s_Current != NULL) + if (s_Current != nullptr) { s_Current->LogMethod(pMethod, pCode, codeSize); } @@ -216,8 +218,8 @@ void PerfMap::LogJITCompiledMethod(MethodDesc * pMethod, PCODE pCode, size_t cod void PerfMap::GetNativeImageSignature(PEFile * pFile, WCHAR * pwszSig, unsigned int nSigSize) { CONTRACTL{ - PRECONDITION(pFile != NULL); - PRECONDITION(pwszSig != NULL); + PRECONDITION(pFile != nullptr); + PRECONDITION(pwszSig != nullptr); PRECONDITION(nSigSize >= 39); } CONTRACTL_END; @@ -262,7 +264,7 @@ void NativeImagePerfMap::LogDataForModule(Module * pModule) STANDARD_VM_CONTRACT; PEImageLayout * pLoadedLayout = pModule->GetFile()->GetLoaded(); - _ASSERTE(pLoadedLayout != NULL); + _ASSERTE(pLoadedLayout != nullptr); SIZE_T baseAddr = (SIZE_T)pLoadedLayout->GetBase(); |