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; }