From e5730839cca71dc11e0e8a1f89b458af8edc729a Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sun, 3 Aug 2008 11:16:15 +0000 Subject: 2008-08-03 Tatsuhiro Tsujikawa Fixed the bug that causes segmentaion fault when resuming download using metalink without size tag. Reproducible only using HTTP URI. * src/HttpResponseCommand.cc * src/FtpNegotiationCommand.cc --- src/HttpResponseCommand.cc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/HttpResponseCommand.cc') diff --git a/src/HttpResponseCommand.cc b/src/HttpResponseCommand.cc index ddf3acdb..929d7992 100644 --- a/src/HttpResponseCommand.cc +++ b/src/HttpResponseCommand.cc @@ -95,7 +95,17 @@ bool HttpResponseCommand::executeInternal() } if(!_requestGroup->isSingleHostMultiConnectionEnabled()) { - _requestGroup->removeURIWhoseHostnameIs(_requestGroup->searchServerHost(cuid)->getHostname()); + // Query by hostname. Searching by CUID may returns NULL. + // In case when resuming download, ServerHost is registered with CUID A. + // Then if requested range is not equal to saved one, + // StreamFileAllocationEntry is created with _nextCommand NULL and + // _currentRequest not NULL. This results creating new command CUID, say + // B and same URI. So searching ServerHost by CUID B fails. + SharedHandle sv = + _requestGroup->searchServerHost(req->getHost()); + if(!sv.isNull()) { + _requestGroup->removeURIWhoseHostnameIs(sv->getHostname()); + } } if(_requestGroup->getPieceStorage().isNull()) { uint64_t totalLength = httpResponse->getEntityLength(); -- cgit