I'm working on an app running under Win7 that embeds Gecko and I've run into a crash during XRE_TermEmbedding that I'm trying to resolve. The stack track for the crash is:

xul.dll!nsCOMPtr<nsIDirectoryServiceProvider>::~nsCOMPtr<nsIDirectoryServiceProvider>()
xul.dll!nsXREDirProvider::~nsXREDirProvider()
xul.dll!nsXREDirProvider::`scalar deleting destructor'()
xul.dll!XRE_TermEmbedding()

The actual line of code that crashes is in ~nsCOMPtr in nsCOMPtr.h:
             NSCAP_RELEASE(this, mRawPtr);

because Visual Studio is convinced that mRawPtr points to an invalid memory location (0xFEEEFEEE in this case) and I tend to agree.

The nsCOMPtr object in question is gDirServiceProvider which XRE_TermEmbedding deletes.

From looking at XRE_TermEmbedding, I can't tell what the right fix is -- perhaps a change to nsXREDirProvider::DoShutdown, or a change in the order of the function calls? Or most likely, I need to change something in my code. I could use a hand with this.

I can reproduce this by calling nsIWebNavigation::LoadURI("http://google.com";) and then calling nsIWebNavigation::Stop(nsIWebNavigation::STOP_ALL) (and the rest of the cleanup done embedding/tests/winEmbed/winEmbed.cpp does in WebBrowserChromeUI::Destroy) before the URI has been loaded.

I can also reproduce this by waiting until the URI is all the way loaded (or at least I receive the nsIWebProgressListener::OnStateChange call with STATE_STOP | STATE_IS_NETWORK | STATE_IS_WINDOW with status 0.

It crashes whether I pass nsnull as the aAppDirProvider argument to XRE_InitEmbedding or my own nsIDirectoryServiceProvider implementation.

I've have the log from "all:5" with my own nsIDirectoryServiceProvider implementation but it's too big to get to the list unmoderated (75k).

I'm not sending a simple test case because I don't have one. I'll create one if necessary but I hope there's enough here to go on.

Thanks much for your help.

-DB

_______________________________________________
dev-embedding mailing list
dev-embedding@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-embedding

Reply via email to