diff options
author | Max Kellermann <max@duempel.org> | 2014-01-04 17:42:03 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-01-04 17:42:03 +0100 |
commit | 68fcc195657fa31b47bc9504286a9b31feda92dc (patch) | |
tree | 223c2ef36aebe471b5600b52ed56ea567d007934 | |
parent | 8e4efd071e8eef033d0a68f6cf60f3910599a1a9 (diff) |
output/httpd: move queue size check to HttpdClient::PushPage()
Don't let the server care for client problems.
-rw-r--r-- | src/output/HttpdClient.cxx | 6 | ||||
-rw-r--r-- | src/output/HttpdClient.hxx | 8 | ||||
-rw-r--r-- | src/output/HttpdOutputPlugin.cxx | 10 |
3 files changed, 6 insertions, 18 deletions
diff --git a/src/output/HttpdClient.cxx b/src/output/HttpdClient.cxx index d16f78942..c0b2429d2 100644 --- a/src/output/HttpdClient.cxx +++ b/src/output/HttpdClient.cxx @@ -387,6 +387,12 @@ HttpdClient::PushPage(Page *page) /* the client is still writing the HTTP request */ return; + if (queue_size > 256 * 1024) { + FormatDebug(httpd_output_domain, + "client is too slow, flushing its queue"); + ClearQueue(); + } + page->Ref(); pages.push(page); queue_size += page->size; diff --git a/src/output/HttpdClient.hxx b/src/output/HttpdClient.hxx index 72a5224ca..94fe2ae62 100644 --- a/src/output/HttpdClient.hxx +++ b/src/output/HttpdClient.hxx @@ -143,14 +143,6 @@ public: void LockClose(); /** - * Returns the total size of this client's page queue. - */ - gcc_pure - size_t GetQueueSize() const { - return queue_size; - } - - /** * Clears the page queue. */ void CancelQueue(); diff --git a/src/output/HttpdOutputPlugin.cxx b/src/output/HttpdOutputPlugin.cxx index 63131533a..ea75cb87d 100644 --- a/src/output/HttpdOutputPlugin.cxx +++ b/src/output/HttpdOutputPlugin.cxx @@ -401,16 +401,6 @@ HttpdOutput::BroadcastPage(Page *page) void HttpdOutput::BroadcastFromEncoder() { - mutex.lock(); - for (auto &client : clients) { - if (client.GetQueueSize() > 256 * 1024) { - FormatDebug(httpd_output_domain, - "client is too slow, flushing its queue"); - client.CancelQueue(); - } - } - mutex.unlock(); - Page *page; while ((page = ReadPage()) != nullptr) { BroadcastPage(page); |