diff options
author | Michael Vogt <mvo@ubuntu.com> | 2014-10-08 08:37:01 +0200 |
---|---|---|
committer | Michael Vogt <mvo@ubuntu.com> | 2014-10-08 08:37:01 +0200 |
commit | 0c158e03ceb509a08d3d4ded79c3151237f669dd (patch) | |
tree | dc7a5cf8f15a7907d00beb75b5fa4d246ec3d36a /methods/server.cc | |
parent | a943fbf21ca0b9b58b8f1492fc518679b1d7c749 (diff) | |
parent | f2b47ba290f3a178c584da83f007cf0f720baabb (diff) |
Merge remote-tracking branch 'mvo/feature/expected-size' into debian/experimental
Diffstat (limited to 'methods/server.cc')
-rw-r--r-- | methods/server.cc | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/methods/server.cc b/methods/server.cc index 4a961f454..cef809738 100644 --- a/methods/server.cc +++ b/methods/server.cc @@ -532,6 +532,13 @@ int ServerMethod::Loop() // Run the data bool Result = true; + + // ensure we don't fetch too much + // 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); @@ -605,7 +612,10 @@ int ServerMethod::Loop() QueueBack = Queue; } else + { + Server->Close(); Fail(true); + } } break; } @@ -700,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; +} + /*}}}*/ |