Commit 2543349f authored by Stefan Eissing's avatar Stefan Eissing
Browse files

mod_http2: fixed slave connection keepalives counter.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1852101 13f79535-47bb-0310-9956-ffa450edef68
parent b8048743
Loading
Loading
Loading
Loading
+2 −1
Changes for CHANGES: 2 added lines, 1 removed line.
Original line number Diff line number Diff line
                                                         -*- coding: utf-8 -*-
Changes with Apache 2.5.1

  *) mod_http2: enable re-use of slave connections again. [Stefan Eissing]
  *) mod_http2: enable re-use of slave connections again. Fixed slave connection
     keepalives counter. [Stefan Eissing]

  *) mod_proxy_wstunnel: Fix websocket proxy over UDS.
     PR 62932 <pavel dcmsys.com>
+8 −6
Changes for modules/http2/h2_conn.c: 8 added lines, 6 removed lines.
Original line number Diff line number Diff line
@@ -316,6 +316,7 @@ conn_rec *h2_slave_create(conn_rec *master, int slave_id, apr_pool_t *parent)
    c->notes                  = apr_table_make(pool, 5);
    c->input_filters          = NULL;
    c->output_filters         = NULL;
    c->keepalives             = 0;
#if AP_MODULE_MAGIC_AT_LEAST(20180903, 1)
    c->filter_conn_ctx        = NULL;
#endif
@@ -348,16 +349,15 @@ conn_rec *h2_slave_create(conn_rec *master, int slave_id, apr_pool_t *parent)
        ap_set_module_config(c->conn_config, mpm, cfg);
    }

    ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c, 
                  "h2_stream(%ld-%d): created slave", master->id, slave_id);
    ap_log_cerror(APLOG_MARK, APLOG_TRACE3, 0, c, 
                  "h2_slave(%s): created", c->log_id);
    return c;
}

void h2_slave_destroy(conn_rec *slave)
{
    ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, slave,
                  "h2_stream(%s): destroy slave", 
                  apr_table_get(slave->notes, H2_TASK_ID_NOTE));
    ap_log_cerror(APLOG_MARK, APLOG_TRACE3, 0, slave,
                  "h2_slave(%s): destroy", slave->log_id);
    slave->sbh = NULL;
    apr_pool_destroy(slave->pool);
}
@@ -370,7 +370,6 @@ apr_status_t h2_slave_run_pre_connection(conn_rec *slave, apr_socket_t *csd)
         * (Not necessarily in pre_connection, but later. Set it here, so it
         * is in place.) */
        slave->keepalives = 1;
    }
        /* We signal that this connection will be closed after the request.
         * Which is true in that sense that we throw away all traffic data
         * on this slave connection after each requests. Although we might
@@ -382,4 +381,7 @@ apr_status_t h2_slave_run_pre_connection(conn_rec *slave, apr_socket_t *csd)
        slave->keepalive = AP_CONN_CLOSE;
        return ap_run_pre_connection(slave, csd);
    }
    ap_assert(slave->output_filters);
    return APR_SUCCESS;
}
+5 −0
Changes for modules/http2/h2_mplx.c: 5 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -438,6 +438,8 @@ void h2_mplx_release_and_join(h2_mplx *m, apr_thread_cond_t *wait)
    apr_status_t status;
    int i, wait_secs = 60;

    ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, m->c,
                  "h2_mplx(%ld): start release", m->id);
    /* How to shut down a h2 connection:
     * 0. abort and tell the workers that no more tasks will come from us */
    m->aborted = 1;
@@ -978,6 +980,9 @@ static apr_status_t unschedule_slow_tasks(h2_mplx *m)
     */
    n = (m->tasks_active - m->limit_active - (int)h2_ihash_count(m->sredo));
    while (n > 0 && (stream = get_latest_repeatable_unsubmitted_stream(m))) {
        ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, m->c, 
                      "h2_mplx(%s): unschedule, resetting task for redo later",
                      stream->task->id);
        h2_task_rst(stream->task, H2_ERR_CANCEL);
        h2_ihash_add(m->sredo, stream);
        --n;
+1 −1
Changes for modules/http2/h2_task.c: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -504,7 +504,7 @@ static int h2_task_pre_conn(conn_rec* c, void *arg)
    (void)arg;
    if (h2_ctx_is_task(ctx)) {
        ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c,
                      "h2_h2, pre_connection, found stream task");
                      "h2_slave(%s), pre_connection, adding filters", c->log_id);
        ap_add_input_filter("H2_SLAVE_IN", NULL, NULL, c);
        ap_add_output_filter("H2_PARSE_H1", NULL, NULL, c);
        ap_add_output_filter("H2_SLAVE_OUT", NULL, NULL, c);