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
This commit is contained in:
naving%netscape.com
2001-09-21 05:50:17 +00:00
parent dcc28801e7
commit 078783926a
2 changed files with 22 additions and 8 deletions

View File

@@ -292,11 +292,22 @@ NS_IMETHODIMP nsFolderCompactState::StartCompacting()
{
nsresult rv = NS_OK;
PRBool isLocked;
nsCOMPtr <nsISupports> 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 <nsISupports> 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;
}

View File

@@ -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 <nsISupports> 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 <nsISupports> 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;
}