nsFolderCompactState::OnStopRequest(nsIRequest *request, nsISupports *ctxt, nsresult status)
nsFolderCompactState::OnStopRequest(nsIChannel *channel, nsISupports *ctxt, nsresult status, const PRUnichar *errorMsg)
nsFolderCompactState::OnStopRequest(nsIRequest *request, nsISupports *ctxt,                                    nsresult status){  nsresult rv = status;  nsCOMPtr<nsIURI> uri;  nsCOMPtr<nsIMsgDBHdr> msgHdr;  nsCOMPtr<nsIMsgDBHdr> newMsgHdr;  if (NS_FAILED(rv)) goto done;  uri = do_QueryInterface(ctxt, &rv);  if (NS_FAILED(rv)) goto done;  EndCopy(nsnull, status);  if (m_curIndex >= m_size)  {    msgHdr = nsnull;;    newMsgHdr = nsnull;    // no more to copy finish it up   FinishCompact();    Release(); // kill self  }  else  {    // in case we're not getting an error, we still need to pretend we did get an error,    // because the compact did not successfully complete.    if (NS_SUCCEEDED(status))    {      m_folder->NotifyCompactCompleted();      CleanupTempFilesAfterError();      ReleaseFolderLock();      Release();    }  }done:  if (NS_FAILED(rv)) {    m_status = rv; // set the status to rv so the destructor can remove the                   // temp folder and database    m_folder->NotifyCompactCompleted();    ReleaseFolderLock();    Release(); // kill self    return rv;  }  return rv;}