diff --git a/dom/base/nsMimeTypeArray.h b/dom/base/nsMimeTypeArray.h index dfaedb7585d8..e039da026ac4 100644 --- a/dom/base/nsMimeTypeArray.h +++ b/dom/base/nsMimeTypeArray.h @@ -102,6 +102,8 @@ public: NS_DECL_ISUPPORTS NS_DECL_NSIDOMMIMETYPE + void DetachPlugin() { mPlugin = nsnull; } + protected: nsIDOMPlugin* mPlugin; nsCOMPtr mMimeType; diff --git a/dom/base/nsPluginArray.cpp b/dom/base/nsPluginArray.cpp index c14c6b6b0bb7..7c2e597980cf 100644 --- a/dom/base/nsPluginArray.cpp +++ b/dom/base/nsPluginArray.cpp @@ -285,8 +285,13 @@ nsPluginElement::~nsPluginElement() NS_IF_RELEASE(mPlugin); if (mMimeTypeArray != nsnull) { - for (PRUint32 i = 0; i < mMimeTypeCount; i++) - NS_IF_RELEASE(mMimeTypeArray[i]); + for (PRUint32 i = 0; i < mMimeTypeCount; i++) { + nsMimeType* mt = static_cast(mMimeTypeArray[i]); + if (mt) { + mt->DetachPlugin(); + NS_RELEASE(mt); + } + } delete[] mMimeTypeArray; } }