diff --git a/ChangeLog b/ChangeLog index a6e7d247..a4d6e5d6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2008-05-11 Tatsuhiro Tsujikawa + + Changed method signature: + SegmentMan::getInFlightSegment + * src/AbstractCommand.cc + * src/SegmentMan.cc + * src/SegmentMan.h + * test/SegmentManTest.cc + 2008-05-11 Tatsuhiro Tsujikawa Changed method signature: diff --git a/src/AbstractCommand.cc b/src/AbstractCommand.cc index 16352cd1..024e67c6 100644 --- a/src/AbstractCommand.cc +++ b/src/AbstractCommand.cc @@ -125,7 +125,8 @@ bool AbstractCommand::execute() { (!checkSocketIsReadable && !checkSocketIsWritable && !nameResolverCheck)) { checkPoint.reset(); if(!_requestGroup->getPieceStorage().isNull()) { - _segments = _requestGroup->getSegmentMan()->getInFlightSegment(cuid); + _segments.clear(); + _requestGroup->getSegmentMan()->getInFlightSegment(_segments, cuid); size_t maxSegments; if(req->isPipeliningEnabled()) { maxSegments = e->option->getAsInt(PREF_MAX_HTTP_PIPELINING); diff --git a/src/SegmentMan.cc b/src/SegmentMan.cc index 673eb2f9..0fbc4cf5 100644 --- a/src/SegmentMan.cc +++ b/src/SegmentMan.cc @@ -147,17 +147,16 @@ SegmentEntryHandle SegmentMan::findSlowerSegmentEntry(const PeerStatHandle& peer return slowSegmentEntry; } -Segments SegmentMan::getInFlightSegment(int32_t cuid) +void SegmentMan::getInFlightSegment(std::deque >& segments, + int32_t cuid) { - Segments temp; for(SegmentEntries::iterator itr = usedSegmentEntries.begin(); itr != usedSegmentEntries.end(); ++itr) { const SegmentEntryHandle& segmentEntry = *itr; if(segmentEntry->cuid == cuid) { - temp.push_back(segmentEntry->segment); + segments.push_back(segmentEntry->segment); } } - return temp; } SegmentHandle SegmentMan::getSegment(int32_t cuid) { diff --git a/src/SegmentMan.h b/src/SegmentMan.h index 2519cf55..fcc9c743 100644 --- a/src/SegmentMan.h +++ b/src/SegmentMan.h @@ -110,11 +110,11 @@ public: bool downloadFinished() const; /** - * Returns a vacant segment. - * If there is no vacant segment, then returns a segment instance whose - * isNull call is true. + * Fill segments which are assigned to the command whose CUID is cuid. + * This function doesn't clear passed segments. */ - std::deque > getInFlightSegment(int32_t cuid); + void getInFlightSegment(std::deque >& segments, + int32_t cuid); SharedHandle getSegment(int32_t cuid); diff --git a/test/SegmentManTest.cc b/test/SegmentManTest.cc index 4a3e63cc..c76f23a5 100644 --- a/test/SegmentManTest.cc +++ b/test/SegmentManTest.cc @@ -78,7 +78,8 @@ void SegmentManTest::testCompleteSegment() seg->updateWrittenLength(pieceLength); segmentMan.completeSegment(1, seg); - std::deque > segments = segmentMan.getInFlightSegment(1); + std::deque > segments; + segmentMan.getInFlightSegment(segments, 1); CPPUNIT_ASSERT_EQUAL((size_t)2, segments.size()); CPPUNIT_ASSERT_EQUAL((size_t)0, segments[0]->getIndex()); CPPUNIT_ASSERT_EQUAL((size_t)2, segments[1]->getIndex());