From da662eeea7df6d787a03b9d95f1cbf99fa87aca4 Mon Sep 17 00:00:00 2001 From: "peterlubczynski%netscape.com" Date: Wed, 7 Nov 2001 01:12:14 +0000 Subject: [PATCH] Fix for when the browser calls "Destroy" twice for some XPCOM plugins bug 104038 r=av sr=attinasi git-svn-id: svn://10.0.0.236/trunk@107529 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp b/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp index ed9c6bd6bef..ca4a850872d 100644 --- a/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp +++ b/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp @@ -405,7 +405,15 @@ nsActivePlugin::~nsActivePlugin() rv = peer->GetOwner(*getter_AddRefs(owner)); owner->SetInstance(nsnull); } - mInstance->Destroy(); + + // now check for cached plugins because they haven't had nsIPluginInstance::Destroy() + // called yet. For non-cached plugins, nsIPluginInstance::Destroy() is called + // in either nsObjectFrame::Destroy() or nsActivePluginList::stopRunning() + PRBool doCache = PR_TRUE; + mInstance->GetValue(nsPluginInstanceVariable_DoCacheBool, (void *) &doCache); + if (doCache) + mInstance->Destroy(); + NS_RELEASE(mInstance); NS_RELEASE(mPeer); } @@ -601,6 +609,7 @@ void nsActivePluginList::stopRunning() else { p->mInstance->SetWindow(nsnull); p->mInstance->Stop(); + p->mInstance->Destroy(); } doCallSetWindowAfterDestroy = PR_FALSE; p->setStopped(PR_TRUE);