diff --git a/src/SOS/Strike/strike.cpp b/src/SOS/Strike/strike.cpp index 91d46be707..2309e8173d 100644 --- a/src/SOS/Strike/strike.cpp +++ b/src/SOS/Strike/strike.cpp @@ -1317,7 +1317,7 @@ DECLARE_API(DumpMT) table.WriteRow("Entry", "MethodDesc", "JIT", "Slot", "Name"); - ISOSMethodEnum *pMethodEnumerator; + ToRelease pMethodEnumerator; if (SUCCEEDED(g_sos15->GetMethodTableSlotEnumerator(dwStartAddr, &pMethodEnumerator))) { SOSMethodData entry; diff --git a/src/SOS/Strike/util.cpp b/src/SOS/Strike/util.cpp index 30df0681e3..28d5c9b1cd 100644 --- a/src/SOS/Strike/util.cpp +++ b/src/SOS/Strike/util.cpp @@ -3644,7 +3644,7 @@ class SOSDacInterface15Simulator : public ISOSDacInterface15 unsigned int slotCount; ULONG refCount; public: - SOSMethodEnum(CLRDATA_ADDRESS mt) : pMT(mt), refCount(1) + SOSMethodEnum(CLRDATA_ADDRESS mt) : pMT(mt), refCount(0) { } @@ -3769,16 +3769,18 @@ class SOSDacInterface15Simulator : public ISOSDacInterface15 ISOSMethodEnum **enumerator) { SOSMethodEnum *simulator = new(std::nothrow) SOSMethodEnum(mt); - *enumerator = simulator; if (simulator == NULL) { return E_OUTOFMEMORY; } HRESULT hr = simulator->Reset(); + + if (SUCCEEDED(hr)) + hr = simulator->QueryInterface(__uuidof(ISOSMethodEnum), (void**)enumerator); + if (FAILED(hr)) - { - simulator->Release(); - } + delete simulator; + return hr; } } SOSDacInterface15Simulator_Instance;