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 @@ -142,14 +142,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. */ 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);