-*- coding: utf-8 -*-
Changes with Apache 2.5.0
+ *) mod_http2: DoS flow control protection is less agressive as long as active tasks stay
+ below worker capacity. Intended to fix problems with media streaming. [Stefan Eissing]
+
*) mod_md: v0.9.0:
Certificate provisioning from Let's Encrypt (and other ACME CAs) for mod_ssl virtual hosts.
[Stefan Eissing]
static apr_status_t unschedule_slow_tasks(h2_mplx *m)
{
h2_stream *stream;
- int n;
+ int n, amax;
/* Try to get rid of streams that occupy workers. Look for safe requests
* that are repeatable. If none found, fail the connection.
+ *
+ * see: https://github.com/icing/mod_h2/issues/120
+ * Enforcing m->limit_active (which can go as low as 2) was too
+ * aggressive for media streaming. Players needed to re-open streams/connections
+ * continously as they were reading large files very slowly.
*/
- n = (m->tasks_active - m->limit_active - (int)h2_ihash_count(m->sredo));
+ amax = m->max_active/2;
+ if (m->limit_active > amax) {
+ amax = m->limit_active;
+ }
+ n = (m->tasks_active - amax - (int)h2_ihash_count(m->sredo));
+
while (n > 0 && (stream = get_latest_repeatable_unsubmitted_stream(m))) {
h2_task_rst(stream->task, H2_ERR_CANCEL);
h2_ihash_add(m->sredo, stream);
--n;
}
- if ((m->tasks_active - h2_ihash_count(m->sredo)) > m->limit_active) {
+ if ((m->tasks_active - h2_ihash_count(m->sredo)) > amax) {
h2_stream *stream = get_timed_out_busy_stream(m);
if (stream) {
/* Too many busy workers, unable to cancel enough streams