From 8a1260a1d1512d0a10ec4e329d7067310a0e794f Mon Sep 17 00:00:00 2001 From: Otto van der Schaaf Date: Sun, 18 Jan 2015 02:22:58 +0100 Subject: [PATCH] posted-requests: run posted requests when appropriate Request termination code relies on posted requests being run. One of the things this fixes is that we won't hang when configured to run before the SSI module. Avoids trouble when changing the module order, which helps https://github.com/pagespeed/ngx_pagespeed/issues/612 --- src/ngx_base_fetch.cc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/ngx_base_fetch.cc b/src/ngx_base_fetch.cc index 971737cbb..cc33f1d35 100644 --- a/src/ngx_base_fetch.cc +++ b/src/ngx_base_fetch.cc @@ -97,23 +97,27 @@ void NgxBaseFetch::ReadCallback(const ps_event_data& data) { CHECK(r->count > 0) << "r->count: " << r->count; + int rc; // If we are unlucky enough to have our connection finalized mid-ipro-lookup, // we must enter a different flow. Also see ps_in_place_check_header_filter(). if (!ctx->base_fetch->ipro_lookup_ && r->connection->error) { ngx_log_error(NGX_LOG_DEBUG, ngx_cycle->log, 0, "pagespeed [%p] request already finalized", r); - ngx_http_finalize_request(r, NGX_ERROR); - return; + rc = NGX_ERROR; + } else { + rc = ps_base_fetch::ps_base_fetch_handler(r); } - int rc = ps_base_fetch::ps_base_fetch_handler(r); - #if (NGX_DEBUG) ngx_log_error(NGX_LOG_DEBUG, ngx_cycle->log, 0, "pagespeed [%p] ps_base_fetch_handler() returned %d for %c", r, rc, data.type); #endif + + ngx_connection_t* c = r->connection; ngx_http_finalize_request(r, rc); + // See http://forum.nginx.org/read.php?2,253006,253061 + ngx_http_run_posted_requests(c); } void NgxBaseFetch::Lock() {