Commit 20da2933 authored by Stefan Eissing's avatar Stefan Eissing
Browse files

On the trunk:

mod_http2: MaxKeepAliveRequests now limits the number of times a 
     slave connection gets reused. 



git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1791669 13f79535-47bb-0310-9956-ffa450edef68
parent 0a5cd9bc
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
                                                         -*- coding: utf-8 -*-
Changes with Apache 2.5.0

  *) mod_http2: MaxKeepAliveRequests now limits the number of times a 
     slave connection gets reused. [Stefan Eissing]

  *) mod_substitute: Fix spurious AH01328 (Line too long) errors on EBCDIC
     systems.  [Eric Covener]

+16 −6
Original line number Diff line number Diff line
@@ -158,12 +158,17 @@ h2_mplx *h2_mplx_create(conn_rec *c, apr_pool_t *parent,
    apr_allocator_t *allocator;
    apr_thread_mutex_t *mutex;
    h2_mplx *m;
    h2_ctx *ctx = h2_ctx_get(c, 0);
    ap_assert(conf);
    
    m = apr_pcalloc(parent, sizeof(h2_mplx));
    if (m) {
        m->id = c->id;
        m->c = c;
        m->s = (ctx? h2_ctx_server_get(ctx) : NULL);
        if (!m->s) {
            m->s = c->base_server;
        }
        
        /* We create a pool with its own allocator to be used for
         * processing slave connections. This is the only way to have the
@@ -286,8 +291,11 @@ static void task_destroy(h2_mplx *m, h2_task *task)
    int reuse_slave = 0;
    
    slave = task->c;

    if (m->s->keep_alive_max == 0 || slave->keepalives < m->s->keep_alive_max) {
        reuse_slave = ((m->spare_slaves->nelts < (m->limit_active * 3 / 2))
                       && !task->rst_error);
    }
    
    if (slave) {
        if (reuse_slave && slave->keepalive == AP_CONN_KEEPALIVE) {
@@ -570,6 +578,9 @@ static apr_status_t out_close(h2_mplx *m, h2_task *task)
    if (!task) {
        return APR_ECONNABORTED;
    }
    if (task->c) {
        ++task->c->keepalives;
    }
    
    stream = h2_ihash_get(m->streams, task->stream_id);
    if (!stream) {
@@ -714,7 +725,6 @@ static h2_task *next_stream_task(h2_mplx *m)
            
            if (!stream->task) {

                m->c->keepalives++;
                if (sid > m->max_stream_started) {
                    m->max_stream_started = sid;
                }
+1 −0
Original line number Diff line number Diff line
@@ -57,6 +57,7 @@ struct h2_mplx {
    long id;
    conn_rec *c;
    apr_pool_t *pool;
    server_rec *s;                  /* server for master conn */

    unsigned int event_pending;
    unsigned int aborted;