зеркало из 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 *account = nsnull;
|
||||
nsCOMPtr<nsIMsgAccount> account;
|
||||
nsresult rv;
|
||||
rv = nsComponentManager::CreateInstance(kMsgAccountCID,
|
||||
nsnull,
|
||||
NS_GET_IID(nsIMsgAccount),
|
||||
(void **)&account);
|
||||
(void **)getter_AddRefs(account));
|
||||
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
account->SetKey(NS_CONST_CAST(char*,(const char*)key));
|
||||
|
|
|
@ -82,9 +82,12 @@ nsMsgFolderDataSource::~nsMsgFolderDataSource (void)
|
|||
{
|
||||
nsresult rv;
|
||||
|
||||
if (!m_shuttingDown)
|
||||
{
|
||||
NS_WITH_SERVICE(nsIMsgMailSession, mailSession, kMsgMailSessionCID, &rv);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
mailSession->RemoveFolderListener(this);
|
||||
}
|
||||
if (--gFolderResourceRefCnt == 0)
|
||||
{
|
||||
nsrefcnt refcnt;
|
||||
|
|
|
@ -81,10 +81,13 @@ nsMsgMessageDataSource::~nsMsgMessageDataSource (void)
|
|||
{
|
||||
nsresult rv;
|
||||
|
||||
NS_WITH_SERVICE(nsIMsgMailSession, mailSession, kMsgMailSessionCID, &rv);
|
||||
if (!m_shuttingDown)
|
||||
{
|
||||
NS_WITH_SERVICE(nsIMsgMailSession, mailSession, kMsgMailSessionCID, &rv);
|
||||
|
||||
if(NS_SUCCEEDED(rv))
|
||||
mailSession->RemoveFolderListener(this);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
mailSession->RemoveFolderListener(this);
|
||||
}
|
||||
if (--gMessageResourceRefCnt == 0)
|
||||
{
|
||||
nsrefcnt refcnt;
|
||||
|
|
|
@ -30,6 +30,7 @@ nsMsgRDFDataSource::nsMsgRDFDataSource():
|
|||
mRDFService(nsnull)
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
m_shuttingDown = PR_FALSE;
|
||||
}
|
||||
|
||||
nsMsgRDFDataSource::~nsMsgRDFDataSource()
|
||||
|
@ -182,6 +183,8 @@ nsMsgRDFDataSource::AddObserver(nsIRDFObserver *aObserver)
|
|||
rv = NS_NewISupportsArray(getter_AddRefs(mObservers));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
}
|
||||
NS_ASSERTION(mObservers->IndexOf(aObserver) == -1, "better not already be observing this");
|
||||
|
||||
mObservers->AppendElement(aObserver);
|
||||
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
|
||||
// that getRDFService knows to re-get the service
|
||||
mRDFService=nsnull;
|
||||
m_shuttingDown = PR_TRUE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -56,6 +56,7 @@ class nsMsgRDFDataSource : public nsIRDFDataSource,
|
|||
nsCOMPtr<nsIMessageView> mMessageView;
|
||||
|
||||
nsCOMPtr<nsISupportsArray> kEmptyArray;
|
||||
PRBool m_shuttingDown;
|
||||
|
||||
private:
|
||||
nsIRDFService *mRDFService;
|
||||
|
|
Загрузка…
Ссылка в новой задаче