Skip to content
This repository was archived by the owner on Apr 10, 2025. It is now read-only.

Commit b9ca5d8

Browse files
committed
backport @oschaff fix of #965
fix issue of PageSpeed silently crashing returning partial web pages backported from commit a5411a1
1 parent 0cf3f1c commit b9ca5d8

File tree

1 file changed

+16
-23
lines changed

1 file changed

+16
-23
lines changed

src/ngx_pagespeed.cc

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1935,35 +1935,17 @@ ngx_int_t ps_resource_handler(ngx_http_request_t* r,
19351935
ngx_http_set_ctx(r, ctx, ngx_pagespeed);
19361936
}
19371937

1938-
if (ps_create_base_fetch(ctx, request_context) != NGX_OK) {
1939-
// Do not need to release request context 'ctx'.
1940-
// http_pool_cleanup will call ps_release_request_context
1941-
return NGX_ERROR;
1942-
}
1943-
1944-
ctx->base_fetch->SetRequestHeadersTakingOwnership(request_headers.release());
1945-
1946-
bool page_callback_added = false;
1947-
scoped_ptr<ProxyFetchPropertyCallbackCollector>
1948-
property_callback(
1949-
ProxyFetchFactory::InitiatePropertyCacheLookup(
1950-
!html_rewrite /* is_resource_fetch */,
1951-
url,
1952-
cfg_s->server_context,
1953-
options,
1954-
ctx->base_fetch,
1955-
false /* requires_blink_cohort (no longer unused) */,
1956-
&page_callback_added));
1957-
19581938
if (pagespeed_resource) {
19591939
// TODO(jefftk): Set using_spdy appropriately. See
19601940
// ProxyInterface::ProxyRequestCallback
1941+
ps_create_base_fetch(ctx, request_context);
19611942
ResourceFetch::Start(
19621943
url,
19631944
custom_options.release() /* null if there aren't custom options */,
19641945
false /* using_spdy */, cfg_s->server_context, ctx->base_fetch);
19651946
return ps_async_wait_response(r);
19661947
} else if (is_an_admin_handler) {
1948+
ps_create_base_fetch(ctx, request_context);
19671949
QueryParams query_params;
19681950
query_params.ParseFromUrl(url);
19691951

@@ -2007,6 +1989,7 @@ ngx_int_t ps_resource_handler(ngx_http_request_t* r,
20071989
}
20081990

20091991
if (html_rewrite) {
1992+
ps_create_base_fetch(ctx, request_context);
20101993
// Do not store driver in request_context, it's not safe.
20111994
RewriteDriver* driver;
20121995

@@ -2033,19 +2016,30 @@ ngx_int_t ps_resource_handler(ngx_http_request_t* r,
20332016
driver->set_pagespeed_option_cookies(pagespeed_option_cookies);
20342017

20352018
// TODO(jefftk): FlushEarlyFlow would go here.
2019+
bool page_callback_added = false;
2020+
ProxyFetchPropertyCallbackCollector* property_callback =
2021+
ProxyFetchFactory::InitiatePropertyCacheLookup(
2022+
!html_rewrite /* is_resource_fetch */,
2023+
url,
2024+
cfg_s->server_context,
2025+
options,
2026+
ctx->base_fetch,
2027+
false /* requires_blink_cohort (no longer unused) */,
2028+
&page_callback_added);
20362029

20372030
// Will call StartParse etc. The rewrite driver will take care of deleting
20382031
// itself if necessary.
20392032
ctx->proxy_fetch = cfg_s->proxy_fetch_factory->CreateNewProxyFetch(
20402033
url_string, ctx->base_fetch, driver,
2041-
property_callback.release(),
2034+
property_callback,
20422035
NULL /* original_content_fetch */);
20432036
return NGX_OK;
20442037
}
20452038

20462039
if (options->in_place_rewriting_enabled() &&
20472040
options->enabled() &&
20482041
options->IsAllowed(url.Spec())) {
2042+
ps_create_base_fetch(ctx, request_context);
20492043
// Do not store driver in request_context, it's not safe.
20502044
RewriteDriver* driver;
20512045
if (custom_options.get() == NULL) {
@@ -2085,8 +2079,7 @@ ngx_int_t ps_resource_handler(ngx_http_request_t* r,
20852079
"Passing on content handling for non-pagespeed resource '%s'",
20862080
url_string.c_str());
20872081

2088-
ctx->base_fetch->Done(false);
2089-
ps_release_base_fetch(ctx);
2082+
CHECK(ctx->base_fetch == NULL);
20902083
// set html_rewrite flag.
20912084
ctx->html_rewrite = true;
20922085
return NGX_DECLINED;

0 commit comments

Comments
 (0)