diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2007-11-28 14:22:28 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2007-11-28 14:22:28 +0000 |
| commit | 5a2f398eca68b2b0330ddcec2b222bf76875f82f (patch) | |
| tree | eb916885f04126e7e48b56fe02de6b44f0493c17 /src/FileAllocationCommand.cc | |
| parent | a022a1826bb573028f264bc6edbc564c0d488bbc (diff) | |
2007-11-28 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Added direct I/O support. The current implementation uses O_DIRECT,
which is not posix standard and is tested on linux 2.6.21.
Currently only file allocation uses direct I/O.
* src/SingleFileAllocationIterator.{h, cc}
* test/SingleFileAllocationIteratorTest.cc
* src/MultiFileAllocationIterator.{h, cc}
* test/MultiFileAllocationIteratorTest.cc
* src/BinaryStream.h
* src/DiskWriter.h
* src/AbstractDiskWriter.{h, cc}
* src/ByteArrayDiskWriter.h
* src/DiskAdaptor.h
* src/AbstractSingleDiskAdaptor.{h, cc}
* src/MultiDiskAdaptor.{h, cc}
* src/FileAllocationEntry.cc
* src/Util.{h, cc}
* src/OptionHandlerFactory.cc
* src/prefs.h
* src/version_usage.cc
* src/option_processing.cc
Moved FileAllocationMan::markCurrentFileAllocationEntryDone() to
handleException.
* src/MultiFileAllocationIterator.cc
Added EINTR handling
* src/SocketCore.cc
Diffstat (limited to 'src/FileAllocationCommand.cc')
| -rw-r--r-- | src/FileAllocationCommand.cc | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/src/FileAllocationCommand.cc b/src/FileAllocationCommand.cc index 01a24d65..16f3c697 100644 --- a/src/FileAllocationCommand.cc +++ b/src/FileAllocationCommand.cc @@ -51,29 +51,25 @@ bool FileAllocationCommand::executeInternal() if(_e->isHaltRequested()) { return true; } - try { - _fileAllocationEntry->allocateChunk(); - if(_fileAllocationEntry->finished()) { - logger->debug(MSG_ALLOCATION_COMPLETED, - _timer.difference(), - Util::llitos(_requestGroup->getTotalLength(), true).c_str()); - _e->_fileAllocationMan->markCurrentFileAllocationEntryDone(); - - _e->addCommand(_fileAllocationEntry->prepareForNextAction(_e)); - - return true; - } else { - _e->commands.push_back(this); - return false; - } - } catch(Exception* e) { + _fileAllocationEntry->allocateChunk(); + if(_fileAllocationEntry->finished()) { + logger->debug(MSG_ALLOCATION_COMPLETED, + _timer.difference(), + Util::llitos(_requestGroup->getTotalLength(), true).c_str()); _e->_fileAllocationMan->markCurrentFileAllocationEntryDone(); - throw; + + _e->addCommand(_fileAllocationEntry->prepareForNextAction(_e)); + + return true; + } else { + _e->commands.push_back(this); + return false; } } bool FileAllocationCommand::handleException(Exception* e) { + _e->_fileAllocationMan->markCurrentFileAllocationEntryDone(); logger->error(MSG_FILE_ALLOCATION_FAILURE, e, cuid); logger->error(MSG_DOWNLOAD_NOT_COMPLETE, cuid, _requestGroup->getFilePath().c_str()); return true; |
