From 57ac64d4d715c64d61878c87bd4fcc98ca020fdb Mon Sep 17 00:00:00 2001 From: "chuang%netscape.com" Date: Tue, 10 Aug 1999 18:57:01 +0000 Subject: [PATCH] Fix bug 11511 and more "remove address book" backend --- mailnews/addrbook/src/nsAbRDFDataSource.cpp | 3 +-- mailnews/addrbook/src/nsCardDataSource.cpp | 12 ++++++------ mailnews/addrbook/src/nsDirPrefs.cpp | 11 +++++++++++ mailnews/addrbook/src/nsDirectoryDataSource.cpp | 15 ++++++++------- 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/mailnews/addrbook/src/nsAbRDFDataSource.cpp b/mailnews/addrbook/src/nsAbRDFDataSource.cpp index 81a8e7372ab3..2bf34e5834b8 100644 --- a/mailnews/addrbook/src/nsAbRDFDataSource.cpp +++ b/mailnews/addrbook/src/nsAbRDFDataSource.cpp @@ -140,10 +140,9 @@ nsAbRDFDataSource::nsAbRDFDataSource(): nsAbRDFDataSource::~nsAbRDFDataSource (void) { - mRDFService->UnregisterDataSource(this); - if (mRDFService) { + mRDFService->UnregisterDataSource(this); nsServiceManager::ReleaseService(kRDFServiceCID, mRDFService); mRDFService = nsnull; } diff --git a/mailnews/addrbook/src/nsCardDataSource.cpp b/mailnews/addrbook/src/nsCardDataSource.cpp index 45b23f18f2ae..37a04a5a79ba 100644 --- a/mailnews/addrbook/src/nsCardDataSource.cpp +++ b/mailnews/addrbook/src/nsCardDataSource.cpp @@ -66,7 +66,12 @@ nsAbCardDataSource::nsAbCardDataSource(): nsAbCardDataSource::~nsAbCardDataSource (void) { - mRDFService->UnregisterDataSource(this); + if (mRDFService) + { + mRDFService->UnregisterDataSource(this); + nsServiceManager::ReleaseService(kRDFServiceCID, mRDFService); + mRDFService = nsnull; + } nsresult rv = NS_OK; NS_WITH_SERVICE(nsIAddrBookSession, abSession, kAddrBookSessionCID, &rv); @@ -82,11 +87,6 @@ nsAbCardDataSource::~nsAbCardDataSource (void) NS_RELEASE2(kNC_Delete, refcnt); NS_RELEASE2(kNC_NewCard, refcnt); - if (mRDFService) - { - nsServiceManager::ReleaseService(kRDFServiceCID, mRDFService); - mRDFService = nsnull; - } } nsresult nsAbCardDataSource::Init() diff --git a/mailnews/addrbook/src/nsDirPrefs.cpp b/mailnews/addrbook/src/nsDirPrefs.cpp index 69390f92cde5..882b2675de58 100644 --- a/mailnews/addrbook/src/nsDirPrefs.cpp +++ b/mailnews/addrbook/src/nsDirPrefs.cpp @@ -1909,8 +1909,19 @@ nsresult DIR_DeleteServerFromList(DIR_Server *server) if (dbPath) { + nsCOMPtr database; + nsFileSpec prefFile = (*dbPath); prefFile += server->fileName; + + // close file before delete it + NS_WITH_SERVICE(nsIAddrDatabase, addrDBFactory, kAddressBookDBCID, &rv); + + if (NS_SUCCEEDED(rv) && addrDBFactory) + rv = addrDBFactory->Open(dbPath, PR_FALSE, getter_AddRefs(database), PR_TRUE); + if (database) + database->ForceClosed(); + prefFile.Delete(PR_FALSE); nsVoidArray *dirList = DIR_GetDirectories(); diff --git a/mailnews/addrbook/src/nsDirectoryDataSource.cpp b/mailnews/addrbook/src/nsDirectoryDataSource.cpp index 2a28eb5fce49..bf64f1bf2a7e 100644 --- a/mailnews/addrbook/src/nsDirectoryDataSource.cpp +++ b/mailnews/addrbook/src/nsDirectoryDataSource.cpp @@ -79,8 +79,14 @@ nsAbDirectoryDataSource::nsAbDirectoryDataSource(): nsAbDirectoryDataSource::~nsAbDirectoryDataSource (void) { - mRDFService->UnregisterDataSource(this); + if (mRDFService) + { + mRDFService->UnregisterDataSource(this); + nsServiceManager::ReleaseService(kRDFServiceCID, mRDFService); + mRDFService = nsnull; + } + nsresult rv = NS_OK; NS_WITH_SERVICE(nsIAddrBookSession, abSession, kAddrBookSessionCID, &rv); if(NS_SUCCEEDED(rv)) @@ -94,12 +100,7 @@ nsAbDirectoryDataSource::~nsAbDirectoryDataSource (void) NS_RELEASE2(kNC_Delete, refcnt); NS_RELEASE2(kNC_NewDirectory, refcnt); - if (mRDFService) - { - nsServiceManager::ReleaseService(kRDFServiceCID, mRDFService); - mRDFService = nsnull; - } - + /* free all directories */ DIR_ShutDown(); }