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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user