breaking cycle between crawler and browser window to fix a leak, using NS_WITH_SERVICE to manage metacharset service.

This commit is contained in:
beard%netscape.com 1999-09-27 23:39:03 +00:00
Родитель edd009bad1
Коммит a3886abf5a
1 изменённых файлов: 14 добавлений и 10 удалений

Просмотреть файл

@ -157,11 +157,22 @@ nsViewerApp::QueryInterface(REFNSIID aIID, void** aInstancePtrResult)
void
nsViewerApp::Destroy()
{
nsresult rv;
// Close all of our windows
nsBrowserWindow::CloseAllWindows();
// Release the crawler
NS_IF_RELEASE(mCrawler);
if (nsnull != mCrawler) {
// break cycle between crawler and window.
mCrawler->SetBrowserWindow(nsnull);
NS_RELEASE(mCrawler);
}
NS_WITH_SERVICE(nsIMetaCharsetService, metacharset, kMetaCharsetCID, &rv);
if (NS_SUCCEEDED(rv)) {
rv = metacharset->End();
}
#ifndef NECKO
// Only shutdown if Initialize has been called...
@ -193,18 +204,11 @@ nsViewerApp::SetupRegistry()
NS_SetupRegistry();
nsIMetaCharsetService* metacharset;
rv = nsServiceManager::GetService(kMetaCharsetCID,
kIMetaCharsetServiceIID,
(nsISupports **) &metacharset);
if(!NS_FAILED(rv)) {
NS_WITH_SERVICE(nsIMetaCharsetService, metacharset, kMetaCharsetCID, &rv);
if (NS_SUCCEEDED(rv)) {
rv = metacharset->Start();
}
if(!NS_FAILED(rv)) {
rv = nsServiceManager::ReleaseService(kMetaCharsetCID, metacharset);
}
// Register our browser window factory
nsIFactory* bwf;
NS_NewBrowserWindowFactory(&bwf);