Commit 0ec31cd6 authored by Stefan Eissing's avatar Stefan Eissing
Browse files

reverting r1807238 bc not addressing the issue https://github.com/icing/mod_h2/issues/120

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1810088 13f79535-47bb-0310-9956-ffa450edef68
parent 78572535
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -66,9 +66,6 @@ Changes with Apache 2.5.0
       to facilitate upgrades.
    [Stefan Eissing]

  *) 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]
+3 −13
Original line number Diff line number Diff line
@@ -957,29 +957,19 @@ static h2_stream *get_timed_out_busy_stream(h2_mplx *m)
static apr_status_t unschedule_slow_tasks(h2_mplx *m) 
{
    h2_stream *stream;
    int n, amax;
    int n;
    
    /* 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.
     */
    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));
    
    n = (m->tasks_active - m->limit_active - (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)) > amax) {
    if ((m->tasks_active - h2_ihash_count(m->sredo)) > m->limit_active) {
        h2_stream *stream = get_timed_out_busy_stream(m);
        if (stream) {
            /* Too many busy workers, unable to cancel enough streams