Commit 121b9c15 authored by Stefan Eissing's avatar Stefan Eissing
Browse files

Merge of r1763246 from trunk:

mod_http2: fixing Windows build issues by replacing hook with own implemenation


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1763250 13f79535-47bb-0310-9956-ffa450edef68
parent dfce7491
Loading
Loading
Loading
Loading
+29 −8
Original line number Diff line number Diff line
@@ -171,13 +171,34 @@ const apr_bucket_type_t h2_bucket_type_beam = {
 * h2_blist, a brigade without allocations
 ******************************************************************************/

APR_HOOK_STRUCT(
            APR_HOOK_LINK(beam_bucket)
)
AP_IMPLEMENT_HOOK_RUN_FIRST(apr_bucket *, beam_bucket,
                            (h2_bucket_beam *beam, apr_bucket_brigade *dest,
                             const apr_bucket *src),
                            (beam, dest, src), NULL)
static apr_array_header_t *beamers;
 
void h2_register_bucket_beamer(h2_bucket_beamer *beamer)
{
    if (!beamers) {
        beamers = apr_array_make(apr_hook_global_pool, 10, 
                                 sizeof(h2_bucket_beamer*));
    }
    APR_ARRAY_PUSH(beamers, h2_bucket_beamer*) = beamer;
}

static apr_bucket *h2_beam_bucket(h2_bucket_beam *beam, 
                                  apr_bucket_brigade *dest,
                                  const apr_bucket *src)
{
    apr_bucket *b = NULL;
    int i;
    if (beamers) {
        for (i = 0; i < beamers->nelts && b == NULL; ++i) {
            h2_bucket_beamer *beamer;
            
            beamer = APR_ARRAY_IDX(beamers, i, h2_bucket_beamer*);
            b = beamer(beam, dest, src);
        }
    }
    return b;
}


apr_size_t h2_util_bl_print(char *buffer, apr_size_t bmax, 
                            const char *tag, const char *sep, 
@@ -860,7 +881,7 @@ transfer:
                ++transferred;
            }
            else {
                bgreen = ap_run_beam_bucket(beam, bb, bred);
                bgreen = h2_beam_bucket(beam, bb, bred);
                while (bgreen && bgreen != APR_BRIGADE_SENTINEL(bb)) {
                    ++transferred;
                    remain -= bgreen->length;
+5 −3
Original line number Diff line number Diff line
@@ -373,8 +373,10 @@ int h2_beam_was_received(h2_bucket_beam *beam);

apr_size_t h2_beam_get_files_beamed(h2_bucket_beam *beam);

AP_DECLARE_HOOK(apr_bucket *, beam_bucket,
                (h2_bucket_beam *beam, apr_bucket_brigade *dest,
                 const apr_bucket *src))
typedef apr_bucket *h2_bucket_beamer(h2_bucket_beam *beam, 
                                     apr_bucket_brigade *dest,
                                     const apr_bucket *src);

void h2_register_bucket_beamer(h2_bucket_beamer *beamer);

#endif /* h2_bucket_beam_h */
+2 −2
Original line number Diff line number Diff line
@@ -290,8 +290,8 @@ conn_rec *h2_slave_create(conn_rec *master, apr_uint32_t slave_id,
     * many streams. 
     */
    l = master->id;
    if (sizeof(long) >= 8 && l < APR_UINT32_MAX) {
        c->id = l|(((unsigned long)slave_id) << 32);
    if (sizeof(unsigned long) >= 8 && l < APR_UINT32_MAX) {
        c->id = l|((unsigned long)slave_id << 32);
    }
    else {
        c->id = l^(~slave_id);
+1 −1
Original line number Diff line number Diff line
@@ -238,7 +238,7 @@ apr_status_t h2_bucket_observer_fire(apr_bucket *b, h2_bucket_event event)
}

const apr_bucket_type_t h2_bucket_type_observer = {
    "H2LAZY", 5, APR_BUCKET_METADATA,
    "H2OBS", 5, APR_BUCKET_METADATA,
    bucket_destroy,
    bucket_read,
    apr_bucket_setaside_noop,
+2 −2
Original line number Diff line number Diff line
@@ -574,8 +574,8 @@ void h2_h2_register_hooks(void)
    ap_hook_fixups(h2_h2_late_fixups, NULL, NULL, APR_HOOK_LAST);

    /* special bucket type transfer through a h2_bucket_beam */
    ap_hook_beam_bucket(h2_bucket_observer_beam, NULL, NULL, APR_HOOK_MIDDLE);
    ap_hook_beam_bucket(h2_bucket_headers_beam, NULL, NULL, APR_HOOK_MIDDLE);
    h2_register_bucket_beamer(h2_bucket_headers_beam);
    h2_register_bucket_beamer(h2_bucket_observer_beam);
}

int h2_h2_process_conn(conn_rec* c)
Loading