diff --git a/mailnews/base/public/nsIMsgBiffManager.idl b/mailnews/base/public/nsIMsgBiffManager.idl index c9de12e350ce..d5509e24afab 100644 --- a/mailnews/base/public/nsIMsgBiffManager.idl +++ b/mailnews/base/public/nsIMsgBiffManager.idl @@ -26,9 +26,10 @@ [scriptable, uuid(17275D52-1622-11d3-8A84-0060B0FC04D2)] interface nsIMsgBiffManager : nsISupports { - void AddServerBiff(in nsIMsgIncomingServer server); - void RemoveServerBiff(in nsIMsgIncomingServer server); - void ForceBiff(in nsIMsgIncomingServer server); - void ForceBiffAll(); + void addServerBiff(in nsIMsgIncomingServer server); + void removeServerBiff(in nsIMsgIncomingServer server); + void forceBiff(in nsIMsgIncomingServer server); + void forceBiffAll(); + void shutdown(); }; diff --git a/mailnews/base/src/nsMsgAccountManager.cpp b/mailnews/base/src/nsMsgAccountManager.cpp index 9b54f055328e..c5d5770d0cc3 100644 --- a/mailnews/base/src/nsMsgAccountManager.cpp +++ b/mailnews/base/src/nsMsgAccountManager.cpp @@ -182,10 +182,16 @@ nsresult nsMsgAccountManager::Init() nsresult nsMsgAccountManager::Shutdown() { - if(m_msgFolderCache) - { - WriteToFolderCache(m_msgFolderCache); - } + nsresult rv; + + if(m_msgFolderCache) + { + WriteToFolderCache(m_msgFolderCache); + } + nsCOMPtr biffService = do_GetService(NS_MSGBIFFMANAGER_CONTRACTID, &rv); + if (NS_SUCCEEDED(rv) && biffService) + biffService->Shutdown(); + CloseCachedConnections(); UnloadAccounts(); @@ -194,6 +200,8 @@ nsresult nsMsgAccountManager::Shutdown() m_prefs = 0; } + m_msgFolderCache = nsnull; + m_haveShutdown = PR_TRUE; return NS_OK; } @@ -1233,7 +1241,7 @@ nsMsgAccountManager::LoadAccounts() //Ensure biff service has started nsCOMPtr biffService = - do_GetService(kMsgBiffManagerCID, &rv); + do_GetService(NS_MSGBIFFMANAGER_CONTRACTID, &rv); // mail.accountmanager.accounts is the main entry point for all accounts diff --git a/mailnews/base/src/nsMsgBiffManager.cpp b/mailnews/base/src/nsMsgBiffManager.cpp index 2566ab11fc98..21a2e818b319 100644 --- a/mailnews/base/src/nsMsgBiffManager.cpp +++ b/mailnews/base/src/nsMsgBiffManager.cpp @@ -28,7 +28,6 @@ #include "nsIObserverService.h" #include "nsStatusBarBiffManager.h" -static NS_DEFINE_CID(kMsgAccountManagerCID, NS_MSGACCOUNTMANAGER_CID); static NS_DEFINE_CID(kStatusBarBiffManagerCID, NS_STATUSBARBIFFMANAGER_CID); NS_IMPL_ISUPPORTS4(nsMsgBiffManager, nsIMsgBiffManager, nsIIncomingServerListener, nsIObserver, nsISupportsWeakReference) @@ -88,7 +87,7 @@ nsresult nsMsgBiffManager::Init() return NS_ERROR_OUT_OF_MEMORY; nsCOMPtr accountManager = - do_GetService(kMsgAccountManagerCID, &rv); + do_GetService(NS_MSGACCOUNTMANAGER_CONTRACTID, &rv); if (NS_SUCCEEDED(rv)) { accountManager->AddIncomingServerListener(this); @@ -110,20 +109,25 @@ nsresult nsMsgBiffManager::Init() return NS_OK; } -nsresult nsMsgBiffManager::Shutdown() +NS_IMETHODIMP nsMsgBiffManager::Shutdown() { - nsresult rv; - nsCOMPtr accountManager = - do_GetService(kMsgAccountManagerCID, &rv); - if (NS_SUCCEEDED(rv)) - { - accountManager->RemoveIncomingServerListener(this); - } - - mHaveShutdown = PR_TRUE; - return NS_OK; + if (mBiffTimer) + { + mBiffTimer->Cancel(); + mBiffTimer = nsnull; + } + nsresult rv; + nsCOMPtr accountManager = do_GetService(NS_MSGACCOUNTMANAGER_CONTRACTID, &rv); + if (NS_SUCCEEDED(rv)) + { + accountManager->RemoveIncomingServerListener(this); + } + + mHaveShutdown = PR_TRUE; + return NS_OK; } + NS_IMETHODIMP nsMsgBiffManager::AddServerBiff(nsIMsgIncomingServer *server) { nsresult rv; diff --git a/mailnews/base/src/nsMsgBiffManager.h b/mailnews/base/src/nsMsgBiffManager.h index 751a68c6ab2a..2c42ec76b1ba 100644 --- a/mailnews/base/src/nsMsgBiffManager.h +++ b/mailnews/base/src/nsMsgBiffManager.h @@ -56,7 +56,6 @@ public: NS_DECL_NSIOBSERVER nsresult Init(); - nsresult Shutdown(); nsresult PerformBiff(); protected: