diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-08-18 14:21:02 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-08-18 14:21:02 +0000 |
| commit | c1f4af537ad4698c756cb7e2d76efaaa8d5f1269 (patch) | |
| tree | d9601800f000e65640b5daccd027cbd3ca46516b | |
| parent | a4d5134f803eb6548752ffb44c482d77e55822e7 (diff) | |
2009-08-18 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Avoided unnecessary memory allocation in
BitfieldMan::getCompletedLength().
* src/BitfieldMan.cc
| -rw-r--r-- | ChangeLog | 6 | ||||
| -rw-r--r-- | src/BitfieldMan.cc | 9 |
2 files changed, 12 insertions, 3 deletions
@@ -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; } |
