Index: src/libchcore/TOverlappedWriterFB.cpp =================================================================== diff -u -N -racd7bcfa7355db4a0d9af99a1bb99d685810d790 -r980c1a0de537813728871676200a0960410b11fb --- src/libchcore/TOverlappedWriterFB.cpp (.../TOverlappedWriterFB.cpp) (revision acd7bcfa7355db4a0d9af99a1bb99d685810d790) +++ src/libchcore/TOverlappedWriterFB.cpp (.../TOverlappedWriterFB.cpp) (revision 980c1a0de537813728871676200a0960410b11fb) @@ -56,6 +56,12 @@ if(!pBuffer) throw TCoreException(eErr_InternalProblem, L"Write was possible, but no buffer is available", LOCATION); + if(m_bReleaseMode) + { + m_spEmptyBuffers->Push(pBuffer); + return TSubTaskBase::eSubResult_Continue; + } + bool bSkip = false; TSubTaskBase::ESubOperationResult eResult = m_spDstFile->WriteFileFB(*pBuffer, bSkip); if(eResult != TSubTaskBase::eSubResult_Continue) @@ -82,6 +88,12 @@ if(!pBuffer) throw TCoreException(eErr_InternalProblem, L"Failed to retrieve write failed buffer", LOCATION); + if(m_bReleaseMode) + { + m_spEmptyBuffers->Push(pBuffer); + return TSubTaskBase::eSubResult_Continue; + } + bool bSkip = false; TSubTaskBase::ESubOperationResult eResult = m_spDstFile->HandleWriteError(*pBuffer, bSkip); if(eResult == TSubTaskBase::eSubResult_Retry) @@ -110,6 +122,18 @@ if(!pBuffer) throw TCoreException(eErr_InternalProblem, L"Write finished was possible, but no buffer is available", LOCATION); + file_size_t fsWritten = pBuffer->GetRealDataSize(); + + if(m_bReleaseMode) + { + AdjustProcessedSize(fsWritten); + + m_spEmptyBuffers->Push(pBuffer); + bProcessedFlag = pBuffer->IsLastPart() && (pBuffer->GetBytesTransferred() == fsWritten); + + return TSubTaskBase::eSubResult_Continue; + } + TSubTaskBase::ESubOperationResult eResult = TSubTaskBase::eSubResult_Continue; if(pBuffer->IsLastPart()) { @@ -133,8 +157,6 @@ } } - file_size_t fsWritten = pBuffer->GetRealDataSize(); - // in case we read past the original eof, try to get new file size from filesystem AdjustProcessedSize(fsWritten);