diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2007-12-05 13:41:56 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2007-12-05 13:41:56 +0000 |
| commit | b75dbc4bbe73133b18c3b2d64f457d8d0bd50d35 (patch) | |
| tree | a240b3625fea0e10b6baba673ca3eb6d1e08c796 /src/IteratableChecksumValidator.cc | |
| parent | 24bdbf9aa6790f95b14449fed62d83fd196a0124 (diff) | |
2007-12-05 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Enable direct I/O support in checksum checking.
* src/IteratableChunkChecksumValidator.{h, cc}
* test/IteratableChunkChecksumValidatorTest.cc
* src/CheckIntegrityEntry.cc
* src/PieceHashCheckIntegrityEntry.cc
* src/IteratableChecksumValidator.{h, cc}
* src/BtCheckIntegrityEntry.cc: Added doc.
Diffstat (limited to 'src/IteratableChecksumValidator.cc')
| -rw-r--r-- | src/IteratableChecksumValidator.cc | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/IteratableChecksumValidator.cc b/src/IteratableChecksumValidator.cc index fc68474b..b3db4b8b 100644 --- a/src/IteratableChecksumValidator.cc +++ b/src/IteratableChecksumValidator.cc @@ -43,7 +43,8 @@ #include "DiskAdaptor.h" #include "BitfieldMan.h" -#define BUFSIZE 16*1024 +#define BUFSIZE (256*1024) +#define ALIGNMENT 512 IteratableChecksumValidator::IteratableChecksumValidator(const SingleFileDownloadContextHandle& dctx, const PieceStorageHandle& pieceStorage): @@ -51,16 +52,21 @@ IteratableChecksumValidator::IteratableChecksumValidator(const SingleFileDownloa _pieceStorage(pieceStorage), _currentOffset(0), _ctx(0), - _logger(LogFactory::getInstance()) {} + _logger(LogFactory::getInstance()), + _buffer(0) {} -IteratableChecksumValidator::~IteratableChecksumValidator() {} +IteratableChecksumValidator::~IteratableChecksumValidator() +{ + delete [] _buffer; +} void IteratableChecksumValidator::validateChunk() { if(!finished()) { - unsigned char data[BUFSIZE]; - int32_t length = _pieceStorage->getDiskAdaptor()->readData(data, sizeof(data), _currentOffset); - _ctx->digestUpdate(data, length); + int32_t length = _pieceStorage->getDiskAdaptor()->readData(_buffer, + BUFSIZE, + _currentOffset); + _ctx->digestUpdate(_buffer, length); _currentOffset += length; if(finished()) { string actualChecksum = Util::toHex((const unsigned char*)_ctx->digestFinal().c_str(), _ctx->digestLength()); @@ -86,6 +92,11 @@ int64_t IteratableChecksumValidator::getTotalLength() const void IteratableChecksumValidator::init() { +#ifdef HAVE_POSIX_MEMALIGN + _buffer = (unsigned char*)Util::allocateAlignedMemory(ALIGNMENT, BUFSIZE); +#else + _buffer = new unsigned char[BUFSIZE]; +#endif // HAVE_POSIX_MEMALIGN _currentOffset = 0; _ctx = new MessageDigestContext(); _ctx->trySetAlgo(_dctx->getChecksumHashAlgo()); |
