You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ic...@apache.org on 2019/03/13 12:59:50 UTC

svn commit: r1855414 - in /httpd/httpd/patches/2.4.x: h2-mega-v1.14.1-backport-bugs-and-whistles-v2.patch h2-mega-v1.14.1-backport-bugs-and-whistles.patch

Author: icing
Date: Wed Mar 13 12:59:50 2019
New Revision: 1855414

URL: http://svn.apache.org/viewvc?rev=1855414&view=rev
Log:
Re-integrated r1852989 into backport patch.

Added:
    httpd/httpd/patches/2.4.x/h2-mega-v1.14.1-backport-bugs-and-whistles-v2.patch
      - copied, changed from r1855413, httpd/httpd/patches/2.4.x/h2-mega-v1.14.1-backport-bugs-and-whistles.patch
Removed:
    httpd/httpd/patches/2.4.x/h2-mega-v1.14.1-backport-bugs-and-whistles.patch

Copied: httpd/httpd/patches/2.4.x/h2-mega-v1.14.1-backport-bugs-and-whistles-v2.patch (from r1855413, httpd/httpd/patches/2.4.x/h2-mega-v1.14.1-backport-bugs-and-whistles.patch)
URL: http://svn.apache.org/viewvc/httpd/httpd/patches/2.4.x/h2-mega-v1.14.1-backport-bugs-and-whistles-v2.patch?p2=httpd/httpd/patches/2.4.x/h2-mega-v1.14.1-backport-bugs-and-whistles-v2.patch&p1=httpd/httpd/patches/2.4.x/h2-mega-v1.14.1-backport-bugs-and-whistles.patch&r1=1855413&r2=1855414&rev=1855414&view=diff
==============================================================================
--- httpd/httpd/patches/2.4.x/h2-mega-v1.14.1-backport-bugs-and-whistles.patch (original)
+++ httpd/httpd/patches/2.4.x/h2-mega-v1.14.1-backport-bugs-and-whistles-v2.patch Wed Mar 13 12:59:50 2019
@@ -1,11 +1,14 @@
 Index: CHANGES
 ===================================================================
---- CHANGES	(revision 1855295)
+--- CHANGES	(revision 1855412)
 +++ CHANGES	(working copy)
-@@ -1,6 +1,48 @@
-                                                          -*- coding: utf-8 -*-
- Changes with Apache 2.4.39
+@@ -14,12 +14,51 @@
+      credentials could be refused in case of concurrent accesses from
+      different users.  PR 63124.  [Simon Kappel <simon.kappel axis.com>]
  
++  *) mod_reqtimeout: Allow to configure (TLS-)handshake timeouts.
++     PR 61310. [Yann Ylavic]
++
 +  *) mod_http2: when SSL renegotiation is inhibited and a 403 ErrorDocument is
 +     in play, the proper HTTP/2 stream reset did not trigger with H2_ERR_HTTP_1_1_REQUIRED.
 +     Fixed. [Michael Kaufmann] 
@@ -45,15 +48,18 @@ Index: CHANGES
 +     terminate improperly and cause a HTTP/2 PROTOCOL_ERROR. 
 +     Fixes <https://github.com/icing/mod_h2/issues/167>. [Michael Kaufmann]
 +
-+  *) mod_http2: enable re-use of slave connections again. Fixed slave connection
-+     keepalives counter. [Stefan Eissing]
-+
+   *) mod_http2: enable re-use of slave connections again. Fixed slave connection
+      keepalives counter. [Stefan Eissing]
+ 
+-  *) mod_reqtimeout: Allow to configure (TLS-)handshake timeouts.
+-     PR 61310. [Yann Ylavic]
+-
    *) mod_proxy_wstunnel: Fix websocket proxy over UDS.
       PR 62932 <pavel dcmsys.com>
  
 Index: docs/manual/mod/mod_http2.xml
 ===================================================================
---- docs/manual/mod/mod_http2.xml	(revision 1855295)
+--- docs/manual/mod/mod_http2.xml	(revision 1855412)
 +++ docs/manual/mod/mod_http2.xml	(working copy)
 @@ -244,6 +244,8 @@
          <contextlist>
@@ -141,7 +147,7 @@ Index: docs/manual/mod/mod_http2.xml
  </modulesynopsis>
 Index: modules/http2/config2.m4
 ===================================================================
---- modules/http2/config2.m4	(revision 1855295)
+--- modules/http2/config2.m4	(revision 1855412)
 +++ modules/http2/config2.m4	(working copy)
 @@ -31,7 +31,6 @@
  h2_h2.lo dnl
@@ -153,7 +159,7 @@ Index: modules/http2/config2.m4
  h2_session.lo dnl
 Index: modules/http2/h2.h
 ===================================================================
---- modules/http2/h2.h	(revision 1855295)
+--- modules/http2/h2.h	(revision 1855412)
 +++ modules/http2/h2.h	(working copy)
 @@ -48,12 +48,12 @@
  #define H2_HEADER_PATH_LEN   5
@@ -180,7 +186,7 @@ Index: modules/http2/h2.h
  #endif /* defined(__mod_h2__h2__) */
 Index: modules/http2/h2_alt_svc.c
 ===================================================================
---- modules/http2/h2_alt_svc.c	(revision 1855295)
+--- modules/http2/h2_alt_svc.c	(revision 1855412)
 +++ modules/http2/h2_alt_svc.c	(working copy)
 @@ -75,7 +75,7 @@
  
@@ -224,7 +230,7 @@ Index: modules/http2/h2_alt_svc.c
                      ahost = NULL;
 Index: modules/http2/h2_config.c
 ===================================================================
---- modules/http2/h2_config.c	(revision 1855295)
+--- modules/http2/h2_config.c	(revision 1855412)
 +++ modules/http2/h2_config.c	(working copy)
 @@ -42,6 +42,55 @@
  #define H2_CONFIG_GET(a, b, n) \
@@ -1174,7 +1180,7 @@ Index: modules/http2/h2_config.c
 -}
 Index: modules/http2/h2_config.h
 ===================================================================
---- modules/http2/h2_config.h	(revision 1855295)
+--- modules/http2/h2_config.h	(revision 1855412)
 +++ modules/http2/h2_config.h	(working copy)
 @@ -42,6 +42,8 @@
      H2_CONF_PUSH_DIARY_SIZE,
@@ -1268,7 +1274,7 @@ Index: modules/http2/h2_config.h
  
 Index: modules/http2/h2_conn.c
 ===================================================================
---- modules/http2/h2_conn.c	(revision 1855295)
+--- modules/http2/h2_conn.c	(revision 1855412)
 +++ modules/http2/h2_conn.c	(working copy)
 @@ -18,6 +18,7 @@
  #include <apr_strings.h>
@@ -1346,54 +1352,22 @@ Index: modules/http2/h2_conn.c
      if (session) {
          apr_status_t status = h2_session_pre_close(session, async_mpm);
          return (status == APR_SUCCESS)? DONE : status;
-@@ -305,9 +301,15 @@
-     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
+@@ -310,8 +306,10 @@
+     c->filter_conn_ctx        = NULL;
+ #endif
      c->bucket_alloc           = apr_bucket_alloc_create(pool);
+-    c->data_in_input_filters  = 0;
+-    c->data_in_output_filters = 0;
 +#if !AP_MODULE_MAGIC_AT_LEAST(20180720, 1)
-     c->data_in_input_filters  = 0;
-     c->data_in_output_filters = 0;
++     c->data_in_input_filters  = 0;
++     c->data_in_output_filters = 0;
 +#endif
      /* prevent mpm_event from making wrong assumptions about this connection,
       * like e.g. using its socket for an async read check. */
      c->clogging_input_filters = 1;
-@@ -332,16 +334,15 @@
-         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);
- }
-@@ -365,6 +366,7 @@
-         slave->keepalive = AP_CONN_CLOSE;
-         return ap_run_pre_connection(slave, csd);
-     }
-+    ap_assert(slave->output_filters);
-     return APR_SUCCESS;
- }
- 
 Index: modules/http2/h2_conn.h
 ===================================================================
---- modules/http2/h2_conn.h	(revision 1855295)
+--- modules/http2/h2_conn.h	(revision 1855412)
 +++ modules/http2/h2_conn.h	(working copy)
 @@ -23,11 +23,11 @@
  /**
@@ -1424,7 +1398,7 @@ Index: modules/http2/h2_conn.h
   * The connection is about to close. If we have not send a GOAWAY
 Index: modules/http2/h2_conn_io.c
 ===================================================================
---- modules/http2/h2_conn_io.c	(revision 1855295)
+--- modules/http2/h2_conn_io.c	(revision 1855412)
 +++ modules/http2/h2_conn_io.c	(working copy)
 @@ -40,12 +40,17 @@
   * ~= 1300 bytes */
@@ -1477,7 +1451,7 @@ Index: modules/http2/h2_conn_io.c
                                WRITE_SIZE_INITIAL : WRITE_SIZE_MAX); 
 Index: modules/http2/h2_conn_io.h
 ===================================================================
---- modules/http2/h2_conn_io.h	(revision 1855295)
+--- modules/http2/h2_conn_io.h	(revision 1855412)
 +++ modules/http2/h2_conn_io.h	(working copy)
 @@ -48,8 +48,7 @@
      apr_size_t slen;
@@ -1491,7 +1465,7 @@ Index: modules/http2/h2_conn_io.h
   * Append data to the buffered output.
 Index: modules/http2/h2_ctx.c
 ===================================================================
---- modules/http2/h2_ctx.c	(revision 1855295)
+--- modules/http2/h2_ctx.c	(revision 1855412)
 +++ modules/http2/h2_ctx.c	(working copy)
 @@ -29,8 +29,8 @@
  {
@@ -1556,7 +1530,7 @@ Index: modules/http2/h2_ctx.c
 -}
 Index: modules/http2/h2_ctx.h
 ===================================================================
---- modules/http2/h2_ctx.h	(revision 1855295)
+--- modules/http2/h2_ctx.h	(revision 1855412)
 +++ modules/http2/h2_ctx.h	(working copy)
 @@ -56,12 +56,11 @@
   */
@@ -1589,7 +1563,7 @@ Index: modules/http2/h2_ctx.h
  #endif /* defined(__mod_h2__h2_ctx__) */
 Index: modules/http2/h2_filter.c
 ===================================================================
---- modules/http2/h2_filter.c	(revision 1855295)
+--- modules/http2/h2_filter.c	(revision 1855412)
 +++ modules/http2/h2_filter.c	(working copy)
 @@ -54,6 +54,7 @@
      const char *data;
@@ -1705,7 +1679,7 @@ Index: modules/http2/h2_filter.c
          if ((status = ap_discard_request_body(r)) != OK) {
 Index: modules/http2/h2_from_h1.c
 ===================================================================
---- modules/http2/h2_from_h1.c	(revision 1855295)
+--- modules/http2/h2_from_h1.c	(revision 1855412)
 +++ modules/http2/h2_from_h1.c	(working copy)
 @@ -594,9 +594,9 @@
          }
@@ -1736,7 +1710,7 @@ Index: modules/http2/h2_from_h1.c
      }
 Index: modules/http2/h2_h2.c
 ===================================================================
---- modules/http2/h2_h2.c	(revision 1855295)
+--- modules/http2/h2_h2.c	(revision 1855412)
 +++ modules/http2/h2_h2.c	(working copy)
 @@ -463,12 +463,11 @@
      return opt_ssl_is_https && opt_ssl_is_https(c);
@@ -1931,7 +1905,7 @@ Index: modules/http2/h2_h2.c
                                "h2_slave_out(%s): copy_files on", task->id);
 Index: modules/http2/h2_h2.h
 ===================================================================
---- modules/http2/h2_h2.h	(revision 1855295)
+--- modules/http2/h2_h2.h	(revision 1855412)
 +++ modules/http2/h2_h2.h	(working copy)
 @@ -57,23 +57,15 @@
   *    the handshake is still ongoing.
@@ -1963,7 +1937,7 @@ Index: modules/http2/h2_h2.h
  #endif /* defined(__mod_h2__h2_h2__) */
 Index: modules/http2/h2_headers.c
 ===================================================================
---- modules/http2/h2_headers.c	(revision 1855295)
+--- modules/http2/h2_headers.c	(revision 1855412)
 +++ modules/http2/h2_headers.c	(working copy)
 @@ -28,6 +28,7 @@
  
@@ -2016,7 +1990,7 @@ Index: modules/http2/h2_headers.c
  
 Index: modules/http2/h2_mplx.c
 ===================================================================
---- modules/http2/h2_mplx.c	(revision 1855295)
+--- modules/http2/h2_mplx.c	(revision 1855412)
 +++ modules/http2/h2_mplx.c	(working copy)
 @@ -40,7 +40,6 @@
  #include "h2_ctx.h"
@@ -2104,16 +2078,7 @@ Index: modules/http2/h2_mplx.c
      }
      return m;
  }
-@@ -327,7 +303,7 @@
-                                && !task->rst_error);
-             }
-             
--            if (reuse_slave && slave->keepalive == AP_CONN_KEEPALIVE) {
-+            if (reuse_slave) {
-                 h2_beam_log(task->output.beam, m->c, APLOG_DEBUG, 
-                             APLOGNO(03385) "h2_task_destroy, reuse slave");    
-                 h2_task_destroy(task);
-@@ -393,10 +369,10 @@
+@@ -394,10 +370,10 @@
      if (task) {
          ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, m->c, /* NO APLOGNO */
                        H2_STRM_MSG(stream, "->03198: %s %s %s"
@@ -2126,19 +2091,16 @@ Index: modules/http2/h2_mplx.c
      }
      else {
          ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, m->c, /* NO APLOGNO */
-@@ -435,8 +411,10 @@
+@@ -436,7 +412,7 @@
  void h2_mplx_release_and_join(h2_mplx *m, apr_thread_cond_t *wait)
  {
      apr_status_t status;
 -    int i, wait_secs = 60;
 +    int i, wait_secs = 60, old_aborted;
  
-+    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;
-@@ -444,6 +422,12 @@
+     ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, m->c,
+                   "h2_mplx(%ld): start release", m->id);
+@@ -447,6 +423,12 @@
      
      H2_MPLX_ENTER_ALWAYS(m);
  
@@ -2151,7 +2113,7 @@ Index: modules/http2/h2_mplx.c
      /* How to shut down a h2 connection:
       * 1. cancel all streams still active */
      while (!h2_ihash_iter(m->streams, stream_cancel_iter, m)) {
-@@ -450,9 +434,7 @@
+@@ -453,9 +435,7 @@
          /* until empty */
      }
      
@@ -2162,7 +2124,7 @@ Index: modules/http2/h2_mplx.c
      ap_assert(h2_ihash_empty(m->streams));
      ap_assert(h2_iq_empty(m->q));
      
-@@ -476,10 +458,6 @@
+@@ -479,10 +459,6 @@
      ap_assert(m->tasks_active == 0);
      m->join_wait = NULL;
      
@@ -2173,7 +2135,7 @@ Index: modules/http2/h2_mplx.c
      /* 4. With all workers done, all streams should be in spurge */
      if (!h2_ihash_empty(m->shold)) {
          ap_log_cerror(APLOG_MARK, APLOG_WARNING, 0, m->c, APLOGNO(03516)
-@@ -488,6 +466,7 @@
+@@ -491,6 +467,7 @@
          h2_ihash_iter(m->shold, unexpected_stream_iter, m);
      }
      
@@ -2181,7 +2143,7 @@ Index: modules/http2/h2_mplx.c
      H2_MPLX_LEAVE(m);
  
      ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, m->c,
-@@ -784,47 +763,14 @@
+@@ -787,47 +764,14 @@
      return rv;
  }
  
@@ -2230,7 +2192,7 @@ Index: modules/http2/h2_mplx.c
      task->worker_done = 1;
      task->done_at = apr_time_now();
      ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, m->c,
-@@ -846,18 +792,24 @@
+@@ -849,18 +793,24 @@
                            m->id, m->limit_active);
          }
      }
@@ -2256,7 +2218,7 @@ Index: modules/http2/h2_mplx.c
              ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, m->c,
                            H2_STRM_MSG(stream, "task_done, stream open")); 
              if (stream->input) {
-@@ -870,6 +822,7 @@
+@@ -873,6 +823,7 @@
      }
      else if ((stream = h2_ihash_get(m->shold, task->stream_id)) != NULL) {
          /* stream is done, was just waiting for this. */
@@ -2264,7 +2226,7 @@ Index: modules/http2/h2_mplx.c
          ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, m->c,
                        H2_STRM_MSG(stream, "task_done, in hold"));
          if (stream->input) {
-@@ -894,7 +847,7 @@
+@@ -897,7 +848,7 @@
  {
      H2_MPLX_ENTER_ALWAYS(m);
  
@@ -2273,17 +2235,7 @@ Index: modules/http2/h2_mplx.c
      --m->tasks_active;
      
      if (m->join_wait) {
-@@ -977,6 +930,9 @@
-      */
-     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;
-@@ -1085,142 +1041,6 @@
+@@ -1091,142 +1042,6 @@
  }
  
  /*******************************************************************************
@@ -2428,7 +2380,7 @@ Index: modules/http2/h2_mplx.c
  
 Index: modules/http2/h2_mplx.h
 ===================================================================
---- modules/http2/h2_mplx.h	(revision 1855295)
+--- modules/http2/h2_mplx.h	(revision 1855412)
 +++ modules/http2/h2_mplx.h	(working copy)
 @@ -47,8 +47,6 @@
  struct apr_thread_cond_t;
@@ -2497,7 +2449,7 @@ Index: modules/http2/h2_mplx.h
  #endif /* defined(__mod_h2__h2_mplx__) */
 Index: modules/http2/h2_ngn_shed.c
 ===================================================================
---- modules/http2/h2_ngn_shed.c	(revision 1855295)
+--- modules/http2/h2_ngn_shed.c	(revision 1855412)
 +++ modules/http2/h2_ngn_shed.c	(working copy)
 @@ -1,392 +0,0 @@
 -/* Licensed to the Apache Software Foundation (ASF) under one or more
@@ -2894,7 +2846,7 @@ Index: modules/http2/h2_ngn_shed.c
 -
 Index: modules/http2/h2_ngn_shed.h
 ===================================================================
---- modules/http2/h2_ngn_shed.h	(revision 1855295)
+--- modules/http2/h2_ngn_shed.h	(revision 1855412)
 +++ modules/http2/h2_ngn_shed.h	(working copy)
 @@ -1,79 +0,0 @@
 -/* Licensed to the Apache Software Foundation (ASF) under one or more
@@ -2978,7 +2930,7 @@ Index: modules/http2/h2_ngn_shed.h
 -#endif /* h2_req_shed_h */
 Index: modules/http2/h2_proxy_session.c
 ===================================================================
---- modules/http2/h2_proxy_session.c	(revision 1855295)
+--- modules/http2/h2_proxy_session.c	(revision 1855412)
 +++ modules/http2/h2_proxy_session.c	(working copy)
 @@ -429,12 +429,6 @@
                                    stream_id, NGHTTP2_STREAM_CLOSED);
@@ -3064,7 +3016,7 @@ Index: modules/http2/h2_proxy_session.c
 -
 Index: modules/http2/h2_proxy_session.h
 ===================================================================
---- modules/http2/h2_proxy_session.h	(revision 1855295)
+--- modules/http2/h2_proxy_session.h	(revision 1855412)
 +++ modules/http2/h2_proxy_session.h	(working copy)
 @@ -120,9 +120,6 @@
  
@@ -3078,7 +3030,7 @@ Index: modules/http2/h2_proxy_session.h
  #endif /* h2_proxy_session_h */
 Index: modules/http2/h2_request.c
 ===================================================================
---- modules/http2/h2_request.c	(revision 1855295)
+--- modules/http2/h2_request.c	(revision 1855412)
 +++ modules/http2/h2_request.c	(working copy)
 @@ -17,6 +17,7 @@
  #include <assert.h>
@@ -3125,7 +3077,7 @@ Index: modules/http2/h2_request.c
      r->trailers_in     = apr_table_make(r->pool, 5);
      r->subprocess_env  = apr_table_make(r->pool, 25);
      r->headers_out     = apr_table_make(r->pool, 12);
-@@ -262,11 +260,29 @@
+@@ -262,6 +260,24 @@
      r->useragent_addr = c->client_addr;
      r->useragent_ip = c->client_ip;
      
@@ -3150,12 +3102,6 @@ Index: modules/http2/h2_request.c
      ap_run_pre_read_request(r, c);
      
      /* Time to populate r with the data we have. */
-     r->request_time = req->request_time;
--    r->method = apr_pstrdup(r->pool, req->method);
-+    r->method = req->method;
-     /* Provide quick information about the request method as soon as known */
-     r->method_number = ap_method_number_of(r->method);
-     if (r->method_number == M_GET && r->method[0] == 'H') {
 @@ -337,3 +353,4 @@
  }
  
@@ -3163,7 +3109,7 @@ Index: modules/http2/h2_request.c
 +
 Index: modules/http2/h2_session.c
 ===================================================================
---- modules/http2/h2_session.c	(revision 1855295)
+--- modules/http2/h2_session.c	(revision 1855412)
 +++ modules/http2/h2_session.c	(working copy)
 @@ -495,9 +495,7 @@
          return NGHTTP2_ERR_WOULDBLOCK;
@@ -3411,7 +3357,7 @@ Index: modules/http2/h2_session.c
                      h2_session_shutdown(session, 
 Index: modules/http2/h2_session.h
 ===================================================================
---- modules/http2/h2_session.h	(revision 1855295)
+--- modules/http2/h2_session.h	(revision 1855412)
 +++ modules/http2/h2_session.h	(working copy)
 @@ -80,12 +80,13 @@
      request_rec *r;                 /* the request that started this in case
@@ -3460,7 +3406,7 @@ Index: modules/http2/h2_session.h
  
 Index: modules/http2/h2_stream.c
 ===================================================================
---- modules/http2/h2_stream.c	(revision 1855295)
+--- modules/http2/h2_stream.c	(revision 1855412)
 +++ modules/http2/h2_stream.c	(working copy)
 @@ -365,9 +365,8 @@
  static void set_policy_for(h2_stream *stream, h2_request *r) 
@@ -3494,7 +3440,7 @@ Index: modules/http2/h2_stream.c
      return NULL;
 Index: modules/http2/h2_switch.c
 ===================================================================
---- modules/http2/h2_switch.c	(revision 1855295)
+--- modules/http2/h2_switch.c	(revision 1855412)
 +++ modules/http2/h2_switch.c	(working copy)
 @@ -55,7 +55,6 @@
      int is_tls = h2_h2_is_tls(c);
@@ -3553,7 +3499,7 @@ Index: modules/http2/h2_switch.c
      }
 Index: modules/http2/h2_task.c
 ===================================================================
---- modules/http2/h2_task.c	(revision 1855295)
+--- modules/http2/h2_task.c	(revision 1855412)
 +++ modules/http2/h2_task.c	(working copy)
 @@ -97,7 +97,7 @@
      apr_brigade_length(bb, 0, &written);
@@ -3602,21 +3548,7 @@ Index: modules/http2/h2_task.c
      ap_assert(task);
  
      if (trace1) {
-@@ -310,11 +293,9 @@
-         }
-     }
-     
--    /* Nothing there, no more data to get. Return APR_EAGAIN on
--     * speculative reads, this is ap_check_pipeline()'s trick to
--     * see if the connection needs closing. */
-+    /* Nothing there, no more data to get. Return. */
-     if (status == APR_EOF && APR_BRIGADE_EMPTY(task->input.bb)) {
--        return (mode == AP_MODE_SPECULATIVE)? APR_EAGAIN : APR_EOF;
-+        return status;
-     }
- 
-     if (trace1) {
-@@ -379,7 +360,7 @@
+@@ -377,7 +360,7 @@
  static apr_status_t h2_filter_slave_output(ap_filter_t* filter,
                                             apr_bucket_brigade* brigade)
  {
@@ -3625,7 +3557,7 @@ Index: modules/http2/h2_task.c
      apr_status_t status;
      
      ap_assert(task);
-@@ -392,7 +373,7 @@
+@@ -390,7 +373,7 @@
  
  static apr_status_t h2_filter_parse_h1(ap_filter_t* f, apr_bucket_brigade* bb)
  {
@@ -3634,19 +3566,16 @@ Index: modules/http2/h2_task.c
      apr_status_t status;
      
      ap_assert(task);
-@@ -502,9 +483,9 @@
+@@ -500,7 +483,7 @@
      
      ctx = h2_ctx_get(c, 0);
      (void)arg;
 -    if (h2_ctx_is_task(ctx)) {
 +    if (ctx->task) {
          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);
+                       "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);
-@@ -525,6 +506,7 @@
+@@ -523,6 +506,7 @@
      ap_assert(req);
  
      apr_pool_create(&pool, slave->pool);
@@ -3654,15 +3583,7 @@ Index: modules/http2/h2_task.c
      task = apr_pcalloc(pool, sizeof(h2_task));
      if (task == NULL) {
          return NULL;
-@@ -599,7 +581,6 @@
-             slave_id = worker_id; 
-         }
-         task->c->id = (c->master->id << free_bits)^slave_id;
--        c->keepalive = AP_CONN_KEEPALIVE;
-     }
-         
-     h2_beam_create(&task->output.beam, c->pool, task->stream_id, "output", 
-@@ -634,18 +615,9 @@
+@@ -630,18 +614,9 @@
      task->c->current_thread = thread; 
      ap_run_process_connection(c);
      
@@ -3684,7 +3605,7 @@ Index: modules/http2/h2_task.c
  }
  
  static apr_status_t h2_task_process_request(h2_task *task, conn_rec *c)
-@@ -683,14 +655,8 @@
+@@ -679,14 +654,8 @@
          
          ap_process_request(r);
          
@@ -3701,7 +3622,7 @@ Index: modules/http2/h2_task.c
          
          /* After the call to ap_process_request, the
           * request pool may have been deleted.  We set
-@@ -725,7 +691,7 @@
+@@ -721,7 +690,7 @@
      }
      
      ctx = h2_ctx_get(c, 0);
@@ -3710,7 +3631,7 @@ Index: modules/http2/h2_task.c
          if (!ctx->task->request->serialize) {
              ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c, 
                            "h2_h2, processing request directly");
-@@ -742,28 +708,3 @@
+@@ -738,28 +707,3 @@
      return DECLINED;
  }
  
@@ -3741,7 +3662,7 @@ Index: modules/http2/h2_task.c
 -}
 Index: modules/http2/h2_task.h
 ===================================================================
---- modules/http2/h2_task.h	(revision 1855295)
+--- modules/http2/h2_task.h	(revision 1855412)
 +++ modules/http2/h2_task.h	(working copy)
 @@ -42,7 +42,6 @@
  struct h2_conn;
@@ -3783,7 +3704,7 @@ Index: modules/http2/h2_task.h
  #endif /* defined(__mod_h2__h2_task__) */
 Index: modules/http2/h2_version.h
 ===================================================================
---- modules/http2/h2_version.h	(revision 1855295)
+--- modules/http2/h2_version.h	(revision 1855412)
 +++ modules/http2/h2_version.h	(working copy)
 @@ -27,7 +27,7 @@
   * @macro
@@ -3805,7 +3726,7 @@ Index: modules/http2/h2_version.h
  #endif /* mod_h2_h2_version_h */
 Index: modules/http2/mod_http2.c
 ===================================================================
---- modules/http2/mod_http2.c	(revision 1855295)
+--- modules/http2/mod_http2.c	(revision 1855412)
 +++ modules/http2/mod_http2.c	(working copy)
 @@ -172,27 +172,6 @@
                           conn_rec *, request_rec *, char *name);
@@ -3921,7 +3842,7 @@ Index: modules/http2/mod_http2.c
          for (i = 0; ctx && i < H2_ALEN(H2_VARS); ++i) {
 Index: modules/http2/mod_http2.h
 ===================================================================
---- modules/http2/mod_http2.h	(revision 1855295)
+--- modules/http2/mod_http2.h	(revision 1855412)
 +++ modules/http2/mod_http2.h	(working copy)
 @@ -30,22 +30,20 @@
  
@@ -4001,7 +3922,7 @@ Index: modules/http2/mod_http2.h
  #endif
 Index: modules/http2/mod_proxy_http2.c
 ===================================================================
---- modules/http2/mod_proxy_http2.c	(revision 1855295)
+--- modules/http2/mod_proxy_http2.c	(revision 1855412)
 +++ modules/http2/mod_proxy_http2.c	(working copy)
 @@ -16,6 +16,7 @@
   
@@ -4588,11 +4509,11 @@ Index: modules/http2/mod_proxy_http2.c
                    APLOGNO(03377) "leaving handler");
 Index: .
 ===================================================================
---- .	(revision 1855295)
+--- .	(revision 1855412)
 +++ .	(working copy)
 
 Property changes on: .
 ___________________________________________________________________
 Modified: svn:mergeinfo
 ## -0,0 +0,1 ##
-   Merged /httpd/httpd/trunk:r1855295
+   Merged /httpd/httpd/trunk:r1855411