KindDragon / vld

Visual Leak Detector for Visual C++ 2008-2015
https://kinddragon.github.io/vld/
GNU Lesser General Public License v2.1
1.01k stars 316 forks source link

dynamic_app test StackWalkMethod=safe Release sometimes crash #17

Closed KindDragon closed 8 years ago

KindDragon commented 8 years ago

Test DynamicLoader.MultithreadLoadingTests :cry:

    ntdll.dll!RtlpFreeHeap()    Unknown
    ntdll.dll!_RtlFreeHeap@12()    Unknown
>   vld_x86.dll!VisualLeakDetector::_RtlFreeHeap(void * heap, unsigned long flags, void * mem) Line 237 C++
    msvcrt.dll!_free() Unknown
    dbghelp.dll!operator delete[](void *)   Unknown
    dbghelp.dll!NMT::~NMT(void) Unknown
    dbghelp.dll!NMP::`scalar deleting destructor'(unsigned int) Unknown
    dbghelp.dll!NMP::close(void)    Unknown
    dbghelp.dll!CDiaSession::~CDiaSession(void) Unknown
    dbghelp.dll!CDiaSession::`scalar deleting destructor'(unsigned int) Unknown
    dbghelp.dll!ObjSymBase::Release(void)   Unknown
    dbghelp.dll!CDiaSymbol::Release(void)   Unknown
    dbghelp.dll!CDiaFrameData::~CDiaFrameData(void) Unknown
    dbghelp.dll!CDiaFrameData::`scalar deleting destructor'(unsigned int)   Unknown
    dbghelp.dll!ObjSymBase::Release(void)   Unknown
    dbghelp.dll!CDiaSymbol::Release(void)   Unknown
    dbghelp.dll!DbhStackServices::FreeUnwindInfoFromSymbols(void *,unsigned long)   Unknown
    dbghelp.dll!DbsStackServices::UnwindInfoHolder::~UnwindInfoHolder(void) Unknown
    dbghelp.dll!DbsX86StackUnwinder::ApplyUnwindInfo(void)  Unknown
    dbghelp.dll!DbsX86StackUnwinder::Unwind(void)   Unknown
    dbghelp.dll!DbsStackUnwinder::DbhUnwind(struct _tagSTACKFRAME64 *,unsigned long,void *,unsigned long,void *)    Unknown
    dbghelp.dll!PickX86Walk(class DbsStackUnwinder *,class DbhStackServices *,struct _tagSTACKFRAME64 *,void *) Unknown
    dbghelp.dll!_StackWalk64@36()  Unknown
    vld_x86.dll!SafeCallStack::getStackTrace(unsigned int maxdepth, const context_t & context) Line 797 C++
    vld_x86.dll!CaptureContext::~CaptureContext() Line 2902 C++
    vld_x86.dll!CrtPatch<140,0>::crtd_malloc(unsigned int size) Line 461    C++
    dynamic.dll!allocator<0>::alloc(LeakOption type, bool) Line 82  C++
    dynamic.dll!SimpleLeak_Malloc() Line 17 C++
    dynamic_app.exe!RunLoaderTests(bool resolve) Line 55    C++
    dynamic_app.exe!Dynamic_Thread_Procedure(void * foo) Line 60    C++
    ucrtbase.dll!__crt_at_quick_exit() Unknown
    kernel32.dll!@BaseThreadInitThunk@12() Unknown
    ntdll.dll!__RtlUserThreadStart()    Unknown
    ntdll.dll!__RtlUserThreadStart@8() Unknown

Unhandled exception at 0x77BC1797 (ntdll.dll) in dynamic_app.exe: 0xC0000005: Access violation reading location 0x00000000.

v140

/cc @ioannis-e @akaStiX

ioannis-e commented 8 years ago

I think a single stack isn't gonna cut it. Take a look at multiple stacks. It seems that while StackWalk64 is running, in another thread SymUnloadModule64 is being called Maybe it interferes maybe not ?

image