delete this dangerous in duchain? [was: Crash in duchaintest]
Andreas Pakulat
apaku at gmx.de
Sun Feb 1 17:57:43 UTC 2009
On 01.02.09 18:32:53, Andreas Pakulat wrote:
> On 30.01.09 20:41:41, Andreas Pakulat wrote:
> > Hi,
> >
> > happens when executing duchaintest, apparently in the
> > spezializedTemplateTest().
> >
> > The crash is actually inside the assembler code for the return call in the
> > TopDUContext::deleting() method. No idea what might be going on, maybe I
> > can talk Frerich (our assembler guru) into doing some debugging with me
> > next week...
> >
> > kdevplatformlanguage.dll!KDevelop::TopDUContext::deleting() Zeile
> > 1314 + 0x6 Bytes C++
> > kdevplatformlanguage.dll!KDevelop::DUContext::~DUContext() Zeile
> > 559 + 0x8 Bytes C++
> > kdev4cppduchain.dll!Cpp::CppDUContext<KDevelop::DUContext>::~CppDUContext<KDevelop::DUContext>()
> > Zeile 601 + 0x2d Bytes C++
> > kdev4cppduchain.dll!Cpp::CppDUContext<KDevelop::DUContext>::`scalar
> > deleting destructor'() + 0x16 Bytes C++
> > kdevplatformlanguage.dll!KDevelop::TopDUContextDynamicData::~TopDUContextDynamicData()
> > Zeile 127 + 0x30 Bytes C++
> > kdevplatformlanguage.dll!KDevelop::TopDUContextDynamicData::`scalar
> > deleting destructor'() + 0x16 Bytes C++
> > kdevplatformlanguage.dll!KDevelop::TopDUContext::deleteSelf()
> > Zeile 897 + 0x1c Bytes C++
> > kdevplatformlanguage.dll!KDevelop::DUChainPrivate::removeDocumentChainFromMemory(KDevelop::TopDUContext
> > * context=0x050811c0) Zeile 332 C++
> > kdevplatformlanguage.dll!KDevelop::DUChain::removeDocumentChain(KDevelop::TopDUContext
> > * context=0x050811c0) Zeile 870 C++
> > > duchaintest.exe!release(KDevelop::TopDUContext * top=0x050811c0)
> > > Zeile 82 + 0x1d Bytes C++
> > duchaintest.exe!TestDUChain::testSpecializedTemplates() Zeile 2289
> > + 0x9 Bytes C++
>
> Hitting this with openprojectpage.h now outside the test. I'm wondering
> wether accessing m_dynamicData is actually a good idea at this point. After
> all, ~DUContext is being called from ~TopDUContextDynamicData, hence
> m_dynamicData might already have been deleted or is now inaccessible.
>
> In particular I'm seeing a delete this _before_ deleting the dynamic data
> and local attribute in ~TopDUContext. Now, you may call me a C++ newbie,
> but that really doesn't look right, in particular accessing members of an
> already-deleted object. It seems msvc puts member variable pointers onto
> bogus adresses when deleting an object, as m_dynamicData value is 0xdddddd.
>
> Moving the delete this to the end of the method fixes the crash here, but
> is this "safe"? Was there a special intent for that delete call?
Apparently that just causes a different assert/crash later on. So I guess
the delete this is needed at that place. So anybody with an idea how to
best fix this? David?
Andreas
--
Stay away from flying saucers today.
More information about the KDevelop-devel
mailing list