From c9b19c6c0d8bdb7e83922bd09fdbbbdf2e1138e6 Mon Sep 17 00:00:00 2001 From: "beard%netscape.com" Date: Sun, 28 Nov 1999 17:20:11 +0000 Subject: [PATCH] bug #19474, r=ftang. fixes major memory leak of nsCharsetAlias2 object, which is (12) bytes but references a total of {52708} bytes. --- htmlparser/src/nsScanner.cpp | 13 ++----------- intl/chardet/src/nsMetaCharsetObserver.cpp | 5 ++++- parser/htmlparser/src/nsScanner.cpp | 13 ++----------- 3 files changed, 8 insertions(+), 23 deletions(-) diff --git a/htmlparser/src/nsScanner.cpp b/htmlparser/src/nsScanner.cpp index c1b1618dac08..b22dd8c58393 100644 --- a/htmlparser/src/nsScanner.cpp +++ b/htmlparser/src/nsScanner.cpp @@ -135,11 +135,7 @@ nsresult nsScanner::SetDocumentCharset(const nsString& aCharset , nsCharsetSourc if( aSource < mCharsetSource) // priority is lower the the current one , just return res; - nsICharsetAlias* calias = nsnull; - res = nsServiceManager::GetService(kCharsetAliasCID, - kICharsetAliasIID, - (nsISupports**)&calias); - + NS_WITH_SERVICE(nsICharsetAlias, calias, kCharsetAliasCID, &res); NS_ASSERTION( nsnull != calias, "cannot find charset alias"); nsAutoString charsetName = aCharset; if( NS_SUCCEEDED(res) && (nsnull != calias)) @@ -152,7 +148,6 @@ nsresult nsScanner::SetDocumentCharset(const nsString& aCharset , nsCharsetSourc } // different, need to change it res = calias->GetPreferred(aCharset, charsetName); - nsServiceManager::ReleaseService(kCharsetAliasCID, calias); if(NS_FAILED(res) && (kCharsetUninitialized == mCharsetSource) ) { @@ -162,10 +157,7 @@ nsresult nsScanner::SetDocumentCharset(const nsString& aCharset , nsCharsetSourc mCharset = charsetName; mCharsetSource = aSource; - nsICharsetConverterManager * ccm = nsnull; - res = nsServiceManager::GetService(kCharsetConverterManagerCID, - nsCOMTypeInfo::GetIID(), - (nsISupports**)&ccm); + NS_WITH_SERVICE(nsICharsetConverterManager, ccm, kCharsetConverterManagerCID, &res); if(NS_SUCCEEDED(res) && (nsnull != ccm)) { nsIUnicodeDecoder * decoder = nsnull; @@ -176,7 +168,6 @@ nsresult nsScanner::SetDocumentCharset(const nsString& aCharset , nsCharsetSourc mUnicodeDecoder = decoder; } - nsServiceManager::ReleaseService(kCharsetConverterManagerCID, ccm); } } return res; diff --git a/intl/chardet/src/nsMetaCharsetObserver.cpp b/intl/chardet/src/nsMetaCharsetObserver.cpp index a860db1a895e..390d16ad30c2 100644 --- a/intl/chardet/src/nsMetaCharsetObserver.cpp +++ b/intl/chardet/src/nsMetaCharsetObserver.cpp @@ -93,14 +93,17 @@ nsMetaCharsetObserver::nsMetaCharsetObserver() nsresult res; mAlias = nsnull; NS_WITH_SERVICE(nsICharsetAlias, calias, kCharsetAliasCID, &res); - if(NS_SUCCEEDED(res)) + if(NS_SUCCEEDED(res)) { mAlias = calias; + NS_ADDREF(mAlias); + } } //------------------------------------------------------------------------- nsMetaCharsetObserver::~nsMetaCharsetObserver() { // should we release mAlias PR_AtomicDecrement(& g_InstanceCount); + NS_IF_RELEASE(mAlias); } //------------------------------------------------------------------------- diff --git a/parser/htmlparser/src/nsScanner.cpp b/parser/htmlparser/src/nsScanner.cpp index c1b1618dac08..b22dd8c58393 100644 --- a/parser/htmlparser/src/nsScanner.cpp +++ b/parser/htmlparser/src/nsScanner.cpp @@ -135,11 +135,7 @@ nsresult nsScanner::SetDocumentCharset(const nsString& aCharset , nsCharsetSourc if( aSource < mCharsetSource) // priority is lower the the current one , just return res; - nsICharsetAlias* calias = nsnull; - res = nsServiceManager::GetService(kCharsetAliasCID, - kICharsetAliasIID, - (nsISupports**)&calias); - + NS_WITH_SERVICE(nsICharsetAlias, calias, kCharsetAliasCID, &res); NS_ASSERTION( nsnull != calias, "cannot find charset alias"); nsAutoString charsetName = aCharset; if( NS_SUCCEEDED(res) && (nsnull != calias)) @@ -152,7 +148,6 @@ nsresult nsScanner::SetDocumentCharset(const nsString& aCharset , nsCharsetSourc } // different, need to change it res = calias->GetPreferred(aCharset, charsetName); - nsServiceManager::ReleaseService(kCharsetAliasCID, calias); if(NS_FAILED(res) && (kCharsetUninitialized == mCharsetSource) ) { @@ -162,10 +157,7 @@ nsresult nsScanner::SetDocumentCharset(const nsString& aCharset , nsCharsetSourc mCharset = charsetName; mCharsetSource = aSource; - nsICharsetConverterManager * ccm = nsnull; - res = nsServiceManager::GetService(kCharsetConverterManagerCID, - nsCOMTypeInfo::GetIID(), - (nsISupports**)&ccm); + NS_WITH_SERVICE(nsICharsetConverterManager, ccm, kCharsetConverterManagerCID, &res); if(NS_SUCCEEDED(res) && (nsnull != ccm)) { nsIUnicodeDecoder * decoder = nsnull; @@ -176,7 +168,6 @@ nsresult nsScanner::SetDocumentCharset(const nsString& aCharset , nsCharsetSourc mUnicodeDecoder = decoder; } - nsServiceManager::ReleaseService(kCharsetConverterManagerCID, ccm); } } return res;