summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--src/BitfieldMan.cc9
2 files changed, 12 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 2b2ac273..8e2b2852 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2009-08-18 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
+ Avoided unnecessary memory allocation in
+ BitfieldMan::getCompletedLength().
+ * src/BitfieldMan.cc
+
+2009-08-18 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
+
Fixed the bug that download fails if
SocketCore::establishConnection() throws exception and aria2
doesn't try another address.
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;
}