зеркало из https://github.com/mozilla/gecko-dev.git
fix leak of accounts, mail session r=scottip bug 000
This commit is contained in:
Родитель
c412022f4a
Коммит
3cbaa80735
|
@ -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;
|
||||||
|
|
||||||
|
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 (--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;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче