summaryrefslogtreecommitdiff
path: root/methods/server.cc
diff options
context:
space:
mode:
Diffstat (limited to 'methods/server.cc')
-rw-r--r--methods/server.cc16
1 files changed, 14 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;
+}
+ /*}}}*/