From c1f4af537ad4698c756cb7e2d76efaaa8d5f1269 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Tue, 18 Aug 2009 14:21:02 +0000 Subject: [PATCH] 2009-08-18 Tatsuhiro Tsujikawa Avoided unnecessary memory allocation in BitfieldMan::getCompletedLength(). * src/BitfieldMan.cc --- ChangeLog | 6 ++++++ src/BitfieldMan.cc | 9 ++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2b2ac273..8e2b2852 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-08-18 Tatsuhiro Tsujikawa + + Avoided unnecessary memory allocation in + BitfieldMan::getCompletedLength(). + * src/BitfieldMan.cc + 2009-08-18 Tatsuhiro Tsujikawa Fixed the bug that download fails if diff --git a/src/BitfieldMan.cc b/src/BitfieldMan.cc index 57110ef3..70776894 100644 --- a/src/BitfieldMan.cc +++ b/src/BitfieldMan.cc @@ -675,8 +675,9 @@ uint64_t BitfieldMan::getFilteredTotalLengthNow() const { } uint64_t BitfieldMan::getCompletedLength(bool useFilter) const { - unsigned char* temp = new unsigned char[bitfieldLength]; + unsigned char* temp; if(useFilter) { + temp = new unsigned char[bitfieldLength]; for(size_t i = 0; i < bitfieldLength; ++i) { temp[i] = bitfield[i]; if(filterEnabled) { @@ -684,7 +685,7 @@ uint64_t BitfieldMan::getCompletedLength(bool useFilter) const { } } } else { - memcpy(temp, bitfield, bitfieldLength); + temp = bitfield; } size_t completedBlocks = bitfield::countSetBit(temp, blocks); uint64_t completedLength = 0; @@ -697,7 +698,9 @@ uint64_t BitfieldMan::getCompletedLength(bool useFilter) const { completedLength = ((uint64_t)completedBlocks)*blockLength; } } - delete [] temp; + if(useFilter) { + delete [] temp; + } return completedLength; }