fix leak of accounts, mail session r=scottip bug 000

This commit is contained in:
bienvenu%netscape.com 1999-10-06 20:00:27 +00:00
Родитель c412022f4a
Коммит 3cbaa80735
5 изменённых файлов: 16 добавлений и 5 удалений

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

@ -1127,12 +1127,12 @@ nsMsgAccountManager::createKeyedAccount(const char* key,
nsIMsgAccount ** aAccount) nsIMsgAccount ** aAccount)
{ {
nsIMsgAccount *account = nsnull; nsCOMPtr<nsIMsgAccount> account;
nsresult rv; nsresult rv;
rv = nsComponentManager::CreateInstance(kMsgAccountCID, rv = nsComponentManager::CreateInstance(kMsgAccountCID,
nsnull, nsnull,
NS_GET_IID(nsIMsgAccount), NS_GET_IID(nsIMsgAccount),
(void **)&account); (void **)getter_AddRefs(account));
if (NS_FAILED(rv)) return rv; if (NS_FAILED(rv)) return rv;
account->SetKey(NS_CONST_CAST(char*,(const char*)key)); account->SetKey(NS_CONST_CAST(char*,(const char*)key));

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

@ -82,9 +82,12 @@ nsMsgFolderDataSource::~nsMsgFolderDataSource (void)
{ {
nsresult rv; nsresult rv;
if (!m_shuttingDown)
{
NS_WITH_SERVICE(nsIMsgMailSession, mailSession, kMsgMailSessionCID, &rv); NS_WITH_SERVICE(nsIMsgMailSession, mailSession, kMsgMailSessionCID, &rv);
if(NS_SUCCEEDED(rv)) if(NS_SUCCEEDED(rv))
mailSession->RemoveFolderListener(this); mailSession->RemoveFolderListener(this);
}
if (--gFolderResourceRefCnt == 0) if (--gFolderResourceRefCnt == 0)
{ {
nsrefcnt refcnt; nsrefcnt refcnt;

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

@ -81,10 +81,13 @@ nsMsgMessageDataSource::~nsMsgMessageDataSource (void)
{ {
nsresult rv; nsresult rv;
NS_WITH_SERVICE(nsIMsgMailSession, mailSession, kMsgMailSessionCID, &rv); if (!m_shuttingDown)
{
NS_WITH_SERVICE(nsIMsgMailSession, mailSession, kMsgMailSessionCID, &rv);
if(NS_SUCCEEDED(rv)) if(NS_SUCCEEDED(rv))
mailSession->RemoveFolderListener(this); mailSession->RemoveFolderListener(this);
}
if (--gMessageResourceRefCnt == 0) if (--gMessageResourceRefCnt == 0)
{ {
nsrefcnt refcnt; nsrefcnt refcnt;

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

@ -30,6 +30,7 @@ nsMsgRDFDataSource::nsMsgRDFDataSource():
mRDFService(nsnull) mRDFService(nsnull)
{ {
NS_INIT_REFCNT(); NS_INIT_REFCNT();
m_shuttingDown = PR_FALSE;
} }
nsMsgRDFDataSource::~nsMsgRDFDataSource() nsMsgRDFDataSource::~nsMsgRDFDataSource()
@ -182,6 +183,8 @@ nsMsgRDFDataSource::AddObserver(nsIRDFObserver *aObserver)
rv = NS_NewISupportsArray(getter_AddRefs(mObservers)); rv = NS_NewISupportsArray(getter_AddRefs(mObservers));
if (NS_FAILED(rv)) return rv; if (NS_FAILED(rv)) return rv;
} }
NS_ASSERTION(mObservers->IndexOf(aObserver) == -1, "better not already be observing this");
mObservers->AppendElement(aObserver); mObservers->AppendElement(aObserver);
return NS_OK; return NS_OK;
} }
@ -278,6 +281,7 @@ nsMsgRDFDataSource::OnShutdown(const nsCID& aClass, nsISupports* service)
// at the very least we set our member variable to nsnull so // at the very least we set our member variable to nsnull so
// that getRDFService knows to re-get the service // that getRDFService knows to re-get the service
mRDFService=nsnull; mRDFService=nsnull;
m_shuttingDown = PR_TRUE;
return NS_OK; return NS_OK;
} }

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

@ -56,6 +56,7 @@ class nsMsgRDFDataSource : public nsIRDFDataSource,
nsCOMPtr<nsIMessageView> mMessageView; nsCOMPtr<nsIMessageView> mMessageView;
nsCOMPtr<nsISupportsArray> kEmptyArray; nsCOMPtr<nsISupportsArray> kEmptyArray;
PRBool m_shuttingDown;
private: private:
nsIRDFService *mRDFService; nsIRDFService *mRDFService;