summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/changelog2
-rw-r--r--methods/http.cc23
2 files changed, 20 insertions, 5 deletions
diff --git a/debian/changelog b/debian/changelog
index d18c19d0c..6e74f4265 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -14,6 +14,8 @@ apt (0.7.4) UNRELEASED; urgency=low
- type conversion;
- unused variable;
- changed SetupProxy() method to void;
+ * Simplified HttpMethod::Fetch on http.cc removing Tail variable;
+ * Fix pipeline handling on http.cc (closes: #413324)
-- Michael Vogt <michael.vogt@ubuntu.com> Wed, 11 Jul 2007 23:20:15 +0100
diff --git a/methods/http.cc b/methods/http.cc
index 3c2d8a36f..068d26978 100644
--- a/methods/http.cc
+++ b/methods/http.cc
@@ -996,7 +996,6 @@ bool HttpMethod::Fetch(FetchItem *)
// Queue the requests
int Depth = -1;
- bool Tail = false;
for (FetchItem *I = Queue; I != 0 && Depth < (signed)PipelineDepth;
I = I->Next, Depth++)
{
@@ -1008,8 +1007,6 @@ bool HttpMethod::Fetch(FetchItem *)
if (Server->Comp(I->Uri) == false)
break;
if (QueueBack == I)
- Tail = true;
- if (Tail == true)
{
QueueBack = I->Next;
SendReq(I,Server->Out);
@@ -1071,7 +1068,6 @@ int HttpMethod::Loop()
delete Server;
Server = new ServerState(Queue->Uri,this);
}
-
/* If the server has explicitly said this is the last connection
then we pre-emptively shut down the pipeline and tear down
the connection. This will speed up HTTP/1.0 servers a tad
@@ -1168,8 +1164,25 @@ int HttpMethod::Loop()
URIDone(Res);
}
else
- Fail(true);
+ {
+ if (Server->ServerFd == -1)
+ {
+ FailCounter++;
+ _error->Discard();
+ Server->Close();
+
+ if (FailCounter >= 2)
+ {
+ Fail(_("Connection failed"),true);
+ FailCounter = 0;
+ }
+ QueueBack = Queue;
+ }
+ else
+ Fail(true);
+ }
+
break;
}