Commit e5e51fee authored by Stefan Eissing's avatar Stefan Eissing
Browse files

On the 2.4.x branch:

Merged /httpd/httpd/trunk:r1797745

mod_http2: Fix for possible CPU busy loop introduced in v1.10.3 where a stream may keep
     the session in continuous check for state changes that never happen. 



git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1797758 13f79535-47bb-0310-9956-ffa450edef68
parent 29c76be6
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -2,6 +2,10 @@

Changes with Apache 2.4.26

  *) mod_http2: Fix for possible CPU busy loop introduced in v1.10.3 where a stream may keep
     the session in continuous check for state changes that never happen. 
     [Stefan Eissing]

  *) mod_mime: Fix error checking for quoted pairs.  [Yann Ylavic]

  *) mod_proxy_wstunnel: Add "upgrade" parameter to allow upgrade to other
+16 −12
Original line number Diff line number Diff line
@@ -1058,7 +1058,9 @@ apr_status_t h2_mplx_idle(h2_mplx *m)
                          "h2_mplx(%ld): idle, no tasks ongoing, %d streams",
                          m->id, (int)h2_ihash_count(m->streams));
            h2_ihash_shift(m->streams, (void**)&stream, 1);
            if (stream && stream->output) {
            if (stream) {
                h2_ihash_add(m->streams, stream);
                if (stream->output && !stream->out_checked) {
                    /* FIXME: this looks like a race between the session thinking
                     * it is idle and the EOF on a stream not being sent.
                     * Signal to caller to leave IDLE state.
@@ -1070,10 +1072,12 @@ apr_status_t h2_mplx_idle(h2_mplx *m)
                                  (long)h2_beam_get_buffered(stream->output));
                    h2_ihash_add(m->streams, stream);
                    check_data_for(m, stream, 0);
                    stream->out_checked = 1;
                    status = APR_EAGAIN;
                }
            }
        }
    }
    register_if_needed(m);

    H2_MPLX_LEAVE(m);
+1 −0
Original line number Diff line number Diff line
@@ -89,6 +89,7 @@ struct h2_stream {
    unsigned int scheduled : 1; /* stream has been scheduled */
    unsigned int has_response : 1; /* response headers are known */
    unsigned int input_eof : 1; /* no more request data coming */
    unsigned int out_checked : 1; /* output eof was double checked */
    unsigned int push_policy;   /* which push policy to use for this request */
    
    struct h2_task *task;       /* assigned task to fullfill request */
+2 −2
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@
 * @macro
 * Version number of the http2 module as c string
 */
#define MOD_HTTP2_VERSION "1.10.5"
#define MOD_HTTP2_VERSION "1.10.6"

/**
 * @macro
@@ -34,7 +34,7 @@
 * release. This is a 24 bit number with 8 bits for major number, 8 bits
 * for minor and 8 bits for patch. Version 1.2.3 becomes 0x010203.
 */
#define MOD_HTTP2_VERSION_NUM 0x010a05
#define MOD_HTTP2_VERSION_NUM 0x010a06


#endif /* mod_h2_h2_version_h */