summaryrefslogtreecommitdiff
path: root/methods
diff options
context:
space:
mode:
Diffstat (limited to 'methods')
-rw-r--r--methods/server.cc16
-rw-r--r--methods/server.h4
2 files changed, 18 insertions, 2 deletions
diff --git a/methods/server.cc b/methods/server.cc
index 82f9b4750..cef809738 100644
--- a/methods/server.cc
+++ b/methods/server.cc
@@ -534,8 +534,10 @@ int ServerMethod::Loop()
bool Result = true;
// ensure we don't fetch too much
- if (Queue->MaximumSize > 0)
- Server->MaximumSize = Queue->MaximumSize;
+ // we could do "Server->MaximumSize = Queue->MaximumSize" here
+ // but that would break the clever pipeline messup detection
+ // so instead we use the size of the biggest item in the queue
+ Server->MaximumSize = FindMaximumObjectSizeInQueue();
if (Server->HaveContent)
Result = Server->RunData(File);
@@ -708,3 +710,13 @@ int ServerMethod::Loop()
return 0;
}
/*}}}*/
+ /*{{{*/
+unsigned long long
+ServerMethod::FindMaximumObjectSizeInQueue() const
+{
+ unsigned long long MaxSizeInQueue = 0;
+ for (FetchItem *I = Queue->Next; I != 0 && I != QueueBack; I = I->Next)
+ MaxSizeInQueue = std::max(MaxSizeInQueue, I->MaximumSize);
+ return MaxSizeInQueue;
+}
+ /*}}}*/
diff --git a/methods/server.h b/methods/server.h
index 3093e00c9..7d5198478 100644
--- a/methods/server.h
+++ b/methods/server.h
@@ -106,6 +106,10 @@ class ServerMethod : public pkgAcqMethod
unsigned long PipelineDepth;
bool AllowRedirect;
+ // Find the biggest item in the fetch queue for the checking of the maximum
+ // size
+ unsigned long long FindMaximumObjectSizeInQueue() const APT_PURE;
+
public:
bool Debug;