From 078783926ac6d0c17fea4c800632f99a82d07181 Mon Sep 17 00:00:00 2001 From: "naving%netscape.com" Date: Fri, 21 Sep 2001 05:50:17 +0000 Subject: [PATCH] 95584 r=bienvenu sr=mscott. Made it so that downloading messages and compacting folder do not write each others data. git-svn-id: svn://10.0.0.236/branches/MOZILLA_0_9_4_BRANCH@103432 18797224-902f-48f8-a5cc-f745e15eee43 --- .../base/src/nsMsgFolderCompactor.cpp | 20 +++++++++++++++---- mozilla/mailnews/local/src/nsPop3Sink.cpp | 10 ++++++---- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/mozilla/mailnews/base/src/nsMsgFolderCompactor.cpp b/mozilla/mailnews/base/src/nsMsgFolderCompactor.cpp index 8a92956a81c..9e68b1ea15c 100644 --- a/mozilla/mailnews/base/src/nsMsgFolderCompactor.cpp +++ b/mozilla/mailnews/base/src/nsMsgFolderCompactor.cpp @@ -292,11 +292,22 @@ NS_IMETHODIMP nsFolderCompactState::StartCompacting() { nsresult rv = NS_OK; PRBool isLocked; + nsCOMPtr supports = do_QueryInterface(NS_STATIC_CAST(nsIMsgFolderCompactor*, this)); m_folder->GetLocked(&isLocked); if(!isLocked) - m_folder->AcquireSemaphore(m_folder); + m_folder->AcquireSemaphore(supports); else - FinishCompact(); + { + NS_ASSERTION(0, "Some other operation is in progress on this folder"); + m_folder->NotifyCompactCompleted(); + if (m_compactAll) + CompactNextFolder(); + else + { + CleanupTempFilesAfterError(); + return rv; + } + } if (m_size > 0) { ShowCompactingStatusMsg(); @@ -397,9 +408,10 @@ nsFolderCompactState::ReleaseFolderLock() nsresult result = NS_OK; if (!m_folder) return result; PRBool haveSemaphore; - result = m_folder->TestSemaphore(m_folder, &haveSemaphore); + nsCOMPtr supports = do_QueryInterface(NS_STATIC_CAST(nsIMsgFolderCompactor*, this)); + result = m_folder->TestSemaphore(supports, &haveSemaphore); if(NS_SUCCEEDED(result) && haveSemaphore) - result = m_folder->ReleaseSemaphore(m_folder); + result = m_folder->ReleaseSemaphore(supports); return result; } diff --git a/mozilla/mailnews/local/src/nsPop3Sink.cpp b/mozilla/mailnews/local/src/nsPop3Sink.cpp index ebe78578c20..4e2de3195c6 100644 --- a/mozilla/mailnews/local/src/nsPop3Sink.cpp +++ b/mozilla/mailnews/local/src/nsPop3Sink.cpp @@ -62,6 +62,7 @@ nsPop3Sink::~nsPop3Sink() PR_FREEIF(m_accountUrl); PR_FREEIF(m_outputBuffer); NS_IF_RELEASE(m_popServer); + ReleaseFolderLock(); NS_IF_RELEASE(m_folder); NS_IF_RELEASE(m_newMailParser); } @@ -141,10 +142,10 @@ nsPop3Sink::BeginMailDelivery(PRBool uidlDownload, PRBool* aBool) // ### if we're doing a UIDL, then the fileSpec needs to be for the current folder PRBool isLocked; - + nsCOMPtr supports = do_QueryInterface(NS_STATIC_CAST(nsIPop3Sink*, this)); m_folder->GetLocked(&isLocked); if(!isLocked) - m_folder->AcquireSemaphore(m_folder); + m_folder->AcquireSemaphore(supports); else return NS_MSG_FOLDER_BUSY; @@ -237,9 +238,10 @@ nsPop3Sink::ReleaseFolderLock() nsresult result = NS_OK; if (!m_folder) return result; PRBool haveSemaphore; - result = m_folder->TestSemaphore(m_folder, &haveSemaphore); + nsCOMPtr supports = do_QueryInterface(NS_STATIC_CAST(nsIPop3Sink*, this)); + result = m_folder->TestSemaphore(supports, &haveSemaphore); if(NS_SUCCEEDED(result) && haveSemaphore) - result = m_folder->ReleaseSemaphore(m_folder); + result = m_folder->ReleaseSemaphore(supports); return result; }