..

> +static int do_store_body(cache_request_rec *cache,
> +                         ap_filter_t *f,
> +                         apr_bucket_brigade *in) {
> +    apr_bucket *e;
> +    apr_bucket_brigade *bb;
> +    apr_status_t rv, rv2;
> +    cache_server_conf *conf;
> +    
> +    conf = (cache_server_conf *) 
> ap_get_module_config(f->r->server->module_config,
> +                                                      &cache_module);
> +
> +    /* try split any buckets larger than threshold */
> +    rv = APR_SUCCESS; /* successful unless found otherwise */
> +    rv2 = APR_SUCCESS;
> +    if (conf->maxbucketsize > 0) {
> +        e = APR_BRIGADE_FIRST(in);
> +        while (e != APR_BRIGADE_SENTINEL(in)) {   

&& (rv == APR_SUCCESS && rv2 == APR_SUCCESS) {

Otherwise we may keep walking through the brigade unnecessarily.

> +    
> +            /* if necessary, split the brigade and send what we have so far 
> */
> +            if (APR_SUCCESS == apr_bucket_split(e, conf->maxbucketsize)) {
> +                e = APR_BUCKET_NEXT(e);
> +                bb = in;
> +                in = apr_brigade_split(bb, e);
> +    
> +                /* if store body fails, don't try store body again */
> +                if (APR_SUCCESS == rv) {

Drop if.

> +                    rv = cache->provider->store_body(cache->handle, f->r, 
> bb);
> +                }
> +                
> +                /* try write split brigade to the filter stack and network */
> +                if (APR_SUCCESS == rv2) {

Drop if.

> +                    rv2 = ap_pass_brigade(f->next, bb);
> +                }
> +                apr_brigade_destroy(bb);
> +            }
> +            else {
> +                e = APR_BUCKET_NEXT(e);
> +            }
> +        }
> +    }
> +


Nice patch.

--
Davi Arnaut

Reply via email to