diff --git a/mozilla/mailnews/base/src/nsMsgAccountManagerDS.cpp b/mozilla/mailnews/base/src/nsMsgAccountManagerDS.cpp index 9bcc3601040..75a88812cbd 100644 --- a/mozilla/mailnews/base/src/nsMsgAccountManagerDS.cpp +++ b/mozilla/mailnews/base/src/nsMsgAccountManagerDS.cpp @@ -99,7 +99,8 @@ protected: static nsIRDFResource* kNC_PageTitleCopies; static nsIRDFResource* kNC_PageTitleAdvanced; static nsIRDFResource* kNC_PageTitleSMTP; - + + static nsrefcnt gAccountManagerResourceRefCnt; private: // enumeration function to convert each server (element) @@ -135,6 +136,8 @@ nsIRDFResource* nsMsgAccountManagerDataSource::kNC_PageTitleCopies=nsnull; nsIRDFResource* nsMsgAccountManagerDataSource::kNC_PageTitleAdvanced=nsnull; nsIRDFResource* nsMsgAccountManagerDataSource::kNC_PageTitleSMTP=nsnull; +nsrefcnt nsMsgAccountManagerDataSource::gAccountManagerResourceRefCnt = 0; + // RDF to match #define NC_RDF_ACCOUNT NC_NAMESPACE_URI "Account" #define NC_RDF_SERVER NC_NAMESPACE_URI "Server" @@ -161,9 +164,27 @@ nsMsgAccountManagerDataSource::nsMsgAccountManagerDataSource(): nsMsgAccountManagerDataSource::~nsMsgAccountManagerDataSource() { - if (getRDFService()) nsServiceManager::ReleaseService(kRDFServiceCID, - getRDFService(), - this); + if (--gAccountManagerResourceRefCnt == 0) + { + NS_IF_RELEASE(kNC_Child); + NS_IF_RELEASE(kNC_Name); + NS_IF_RELEASE(kNC_NameSort); + NS_IF_RELEASE(kNC_PageTag); + NS_IF_RELEASE(kNC_Account); + NS_IF_RELEASE(kNC_Server); + NS_IF_RELEASE(kNC_Identity); + NS_IF_RELEASE(kNC_PageTitleMain); + NS_IF_RELEASE(kNC_PageTitleServer); + NS_IF_RELEASE(kNC_PageTitleCopies); + NS_IF_RELEASE(kNC_PageTitleAdvanced); + NS_IF_RELEASE(kNC_PageTitleSMTP); + + NS_IF_RELEASE(kNC_AccountRoot); + + // eventually these need to exist in some kind of array + // that's easily extensible + NS_IF_RELEASE(kNC_Settings); + } } @@ -182,7 +203,7 @@ nsMsgAccountManagerDataSource::Init() if (NS_FAILED(rv)) return rv; } - if (! kNC_Child) { + if (gAccountManagerResourceRefCnt++ == 0) { getRDFService()->GetResource(NC_RDF_CHILD, &kNC_Child); getRDFService()->GetResource(NC_RDF_NAME, &kNC_Name); getRDFService()->GetResource(NC_RDF_NAME_SORT, &kNC_NameSort); diff --git a/mozilla/mailnews/base/src/nsMsgFolderDataSource.cpp b/mozilla/mailnews/base/src/nsMsgFolderDataSource.cpp index 057d337c4e9..5f324c17168 100644 --- a/mozilla/mailnews/base/src/nsMsgFolderDataSource.cpp +++ b/mozilla/mailnews/base/src/nsMsgFolderDataSource.cpp @@ -70,6 +70,7 @@ nsIRDFResource* nsMsgFolderDataSource::kNC_Compact= nsnull; nsIRDFResource* nsMsgFolderDataSource::kNC_Rename= nsnull; nsIRDFResource* nsMsgFolderDataSource::kNC_EmptyTrash= nsnull; +nsrefcnt nsMsgFolderDataSource::gFolderResourceRefCnt = 0; nsMsgFolderDataSource::nsMsgFolderDataSource(): mInitialized(PR_FALSE) @@ -81,33 +82,35 @@ nsMsgFolderDataSource::~nsMsgFolderDataSource (void) { nsresult rv; - NS_WITH_SERVICE(nsIMsgMailSession, mailSession, kMsgMailSessionCID, &rv); + NS_WITH_SERVICE(nsIMsgMailSession, mailSession, kMsgMailSessionCID, &rv); if(NS_SUCCEEDED(rv)) mailSession->RemoveFolderListener(this); + if (--gFolderResourceRefCnt == 0) + { + nsrefcnt refcnt; + NS_RELEASE2(kNC_Child, refcnt); + NS_RELEASE2(kNC_MessageChild, refcnt); + NS_RELEASE2(kNC_Folder, refcnt); + NS_RELEASE2(kNC_Name, refcnt); + NS_RELEASE2(kNC_NameSort, refcnt); + NS_RELEASE2(kNC_SpecialFolder, refcnt); + NS_RELEASE2(kNC_ServerType, refcnt); + NS_RELEASE2(kNC_IsServer, refcnt); + NS_RELEASE2(kNC_TotalMessages, refcnt); + NS_RELEASE2(kNC_TotalUnreadMessages, refcnt); + NS_RELEASE2(kNC_Charset, refcnt); + NS_RELEASE2(kNC_BiffState, refcnt); - nsrefcnt refcnt; - NS_RELEASE2(kNC_Child, refcnt); - NS_RELEASE2(kNC_MessageChild, refcnt); - NS_RELEASE2(kNC_Folder, refcnt); - NS_RELEASE2(kNC_Name, refcnt); - NS_RELEASE2(kNC_NameSort, refcnt); - NS_RELEASE2(kNC_SpecialFolder, refcnt); - NS_RELEASE2(kNC_ServerType, refcnt); - NS_RELEASE2(kNC_IsServer, refcnt); - NS_RELEASE2(kNC_TotalMessages, refcnt); - NS_RELEASE2(kNC_TotalUnreadMessages, refcnt); - NS_RELEASE2(kNC_Charset, refcnt); - NS_RELEASE2(kNC_BiffState, refcnt); - - NS_RELEASE2(kNC_Delete, refcnt); - NS_RELEASE2(kNC_NewFolder, refcnt); - NS_RELEASE2(kNC_GetNewMessages, refcnt); - NS_RELEASE2(kNC_Copy, refcnt); - NS_RELEASE2(kNC_Move, refcnt); - NS_RELEASE2(kNC_MarkAllMessagesRead, refcnt); - NS_RELEASE2(kNC_Compact, refcnt); - NS_RELEASE2(kNC_Rename, refcnt); - NS_RELEASE2(kNC_EmptyTrash, refcnt); + NS_RELEASE2(kNC_Delete, refcnt); + NS_RELEASE2(kNC_NewFolder, refcnt); + NS_RELEASE2(kNC_GetNewMessages, refcnt); + NS_RELEASE2(kNC_Copy, refcnt); + NS_RELEASE2(kNC_Move, refcnt); + NS_RELEASE2(kNC_MarkAllMessagesRead, refcnt); + NS_RELEASE2(kNC_Compact, refcnt); + NS_RELEASE2(kNC_Rename, refcnt); + NS_RELEASE2(kNC_EmptyTrash, refcnt); + } } @@ -126,7 +129,7 @@ nsresult nsMsgFolderDataSource::Init() if(!rdf) return NS_ERROR_FAILURE; - if (! kNC_Child) { + if (gFolderResourceRefCnt++ == 0) { rdf->GetResource(NC_RDF_CHILD, &kNC_Child); rdf->GetResource(NC_RDF_MESSAGECHILD, &kNC_MessageChild); rdf->GetResource(NC_RDF_FOLDER, &kNC_Folder); diff --git a/mozilla/mailnews/base/src/nsMsgFolderDataSource.h b/mozilla/mailnews/base/src/nsMsgFolderDataSource.h index f48b0efa72e..aab0740aa92 100644 --- a/mozilla/mailnews/base/src/nsMsgFolderDataSource.h +++ b/mozilla/mailnews/base/src/nsMsgFolderDataSource.h @@ -176,6 +176,8 @@ protected: static nsIRDFResource* kNC_Rename; static nsIRDFResource* kNC_EmptyTrash; + static nsrefcnt gFolderResourceRefCnt; + nsCOMPtr kFolderArcsOutArray; }; diff --git a/mozilla/mailnews/base/src/nsMsgMessageDataSource.cpp b/mozilla/mailnews/base/src/nsMsgMessageDataSource.cpp index 6bd7785b166..05a32771632 100644 --- a/mozilla/mailnews/base/src/nsMsgMessageDataSource.cpp +++ b/mozilla/mailnews/base/src/nsMsgMessageDataSource.cpp @@ -66,6 +66,8 @@ nsIRDFResource* nsMsgMessageDataSource::kNC_ToggleRead= nsnull; nsIRDFResource* nsMsgMessageDataSource::kNC_MarkFlagged= nsnull; nsIRDFResource* nsMsgMessageDataSource::kNC_MarkUnflagged= nsnull; +nsrefcnt nsMsgMessageDataSource::gMessageResourceRefCnt = 0; + nsMsgMessageDataSource::nsMsgMessageDataSource(): mInitialized(PR_FALSE), @@ -78,52 +80,34 @@ nsMsgMessageDataSource::nsMsgMessageDataSource(): nsMsgMessageDataSource::~nsMsgMessageDataSource (void) { nsresult rv; - nsIRDFService *rdf = getRDFService(); - if(rdf) - rdf->UnregisterDataSource(this); NS_WITH_SERVICE(nsIMsgMailSession, mailSession, kMsgMailSessionCID, &rv); if(NS_SUCCEEDED(rv)) mailSession->RemoveFolderListener(this); + if (--gMessageResourceRefCnt == 0) + { + nsrefcnt refcnt; - nsrefcnt refcnt; - - if (kNC_Subject) NS_RELEASE2(kNC_Subject, refcnt); - if (kNC_SubjectCollation) NS_RELEASE2(kNC_SubjectCollation, refcnt); - if (kNC_Sender) NS_RELEASE2(kNC_Sender, refcnt); - if (kNC_SenderCollation) NS_RELEASE2(kNC_SenderCollation, refcnt); - if (kNC_Date) NS_RELEASE2(kNC_Date, refcnt); - if (kNC_Status) NS_RELEASE2(kNC_Status, refcnt); - if (kNC_Flagged) NS_RELEASE2(kNC_Flagged, refcnt); - if (kNC_Priority) NS_RELEASE2(kNC_Priority, refcnt); - if (kNC_Size) NS_RELEASE2(kNC_Size, refcnt); - if (kNC_Total) NS_RELEASE2(kNC_Total, refcnt); - if (kNC_Unread) NS_RELEASE2(kNC_Unread, refcnt); - if (kNC_MessageChild) NS_RELEASE2(kNC_MessageChild, refcnt); - if (kNC_MarkRead) NS_RELEASE2(kNC_MarkRead, refcnt); - if (kNC_MarkUnread) NS_RELEASE2(kNC_MarkUnread, refcnt); - if (kNC_ToggleRead) NS_RELEASE2(kNC_ToggleRead, refcnt); - if (kNC_MarkRead) NS_RELEASE2(kNC_MarkFlagged, refcnt); - if (kNC_MarkUnread) NS_RELEASE2(kNC_MarkUnflagged, refcnt); + } NS_IF_RELEASE(mHeaderParser); } @@ -151,7 +135,7 @@ nsresult nsMsgMessageDataSource::Init() if(NS_SUCCEEDED(rv)) mailSession->AddFolderListener(this); PR_ASSERT(NS_SUCCEEDED(rv)); - if (! kNC_Subject) { + if (gMessageResourceRefCnt++ == 0) { rdf->GetResource(NC_RDF_SUBJECT, &kNC_Subject); rdf->GetResource(NC_RDF_SUBJECT_COLLATION_SORT, &kNC_SubjectCollation); diff --git a/mozilla/mailnews/base/src/nsMsgMessageDataSource.h b/mozilla/mailnews/base/src/nsMsgMessageDataSource.h index 347bd0585a9..a74a248be11 100644 --- a/mozilla/mailnews/base/src/nsMsgMessageDataSource.h +++ b/mozilla/mailnews/base/src/nsMsgMessageDataSource.h @@ -200,6 +200,8 @@ protected: nsCOMPtr kThreadsArcsOutArray; nsCOMPtr kNoThreadsArcsOutArray; + static nsrefcnt gMessageResourceRefCnt; + }; PR_EXTERN(nsresult) diff --git a/mozilla/mailnews/compose/build/nsMsgCompFactory.cpp b/mozilla/mailnews/compose/build/nsMsgCompFactory.cpp index ce9e90be17c..c38cdbfbc04 100644 --- a/mozilla/mailnews/compose/build/nsMsgCompFactory.cpp +++ b/mozilla/mailnews/compose/build/nsMsgCompFactory.cpp @@ -80,7 +80,6 @@ public: nsCID mClassID; char* mClassName; char* mProgID; - nsIServiceManager* mServiceManager; }; nsMsgComposeFactory::nsMsgComposeFactory(const nsCID &aClass, @@ -93,16 +92,12 @@ nsMsgComposeFactory::nsMsgComposeFactory(const nsCID &aClass, { NS_INIT_REFCNT(); - // store a copy of the - compMgrSupports->QueryInterface(nsCOMTypeInfo::GetIID(), - (void **)&mServiceManager); } nsMsgComposeFactory::~nsMsgComposeFactory() { NS_ASSERTION(mRefCnt == 0, "non-zero refcnt at destruction"); - NS_IF_RELEASE(mServiceManager); PL_strfree(mClassName); PL_strfree(mProgID); }