From: Jean-Frederic Clere Date: Wed, 10 Mar 2021 16:24:21 +0000 (+0000) Subject: Fix the fixed timeout, thanks RĂ¼diger. X-Git-Tag: 2.5.0-alpha2-ci-test-only~994 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d1a7c6c936f4396a48359d2072b57825947e3bae;p=thirdparty%2Fapache%2Fhttpd.git Fix the fixed timeout, thanks RĂ¼diger. And set the current_thread of the connection. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1887439 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/proxy/mod_proxy_hcheck.c b/modules/proxy/mod_proxy_hcheck.c index 9986f1a9bd7..b78147beedd 100644 --- a/modules/proxy/mod_proxy_hcheck.c +++ b/modules/proxy/mod_proxy_hcheck.c @@ -615,7 +615,7 @@ static int hc_get_backend(const char *proxy_function, proxy_conn_rec **backend, return hc_determine_connection(ctx, hc, &(*backend)->addr, ptemp); } -static apr_status_t hc_check_cping(baton_t *baton) +static apr_status_t hc_check_cping(baton_t *baton, apr_thread_t *thread) { int status; sctx_t *ctx = baton->ctx; @@ -641,8 +641,18 @@ static apr_status_t hc_check_cping(baton_t *baton) return backend_cleanup("HCCPING", backend, ctx->s, status); } set_request_connection(r, backend->connection); - - timeout = apr_time_from_sec(10); /* 10 seconds */ + backend->connection->current_thread = thread; + + if (hc->s->ping_timeout_set) { + timeout = hc->s->ping_timeout; + } else if ( hc->s->conn_timeout_set) { + timeout = hc->s->conn_timeout; + } else if ( hc->s->timeout_set) { + timeout = hc->s->timeout; + } else { + /* default to socket timeout */ + apr_socket_timeout_get(backend->sock, &timeout); + } status = ajp_handle_cping_cpong(backend->sock, r, timeout); ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, baton->ctx->s, "HCCPING done %d", status); return backend_cleanup("HCCPING", backend, ctx->s, status); @@ -788,7 +798,7 @@ static int hc_read_body(request_rec *r, apr_bucket_brigade *bb) * then apply those to the resulting response, otherwise * any status code 2xx or 3xx is considered "passing" */ -static apr_status_t hc_check_http(baton_t *baton) +static apr_status_t hc_check_http(baton_t *baton, apr_thread_t *thread) { int status; proxy_conn_rec *backend = NULL; @@ -818,6 +828,7 @@ static apr_status_t hc_check_http(baton_t *baton) return backend_cleanup("HCOH", backend, ctx->s, status); } set_request_connection(r, backend->connection); + backend->connection->current_thread = thread; bb = apr_brigade_create(r->pool, r->connection->bucket_alloc); @@ -884,10 +895,10 @@ static void * APR_THREAD_FUNC hc_check(apr_thread_t *thread, void *b) rv = hc_check_tcp(baton); } else if (hc->s->method == CPING) { - rv = hc_check_cping(baton); + rv = hc_check_cping(baton, thread); } else { - rv = hc_check_http(baton); + rv = hc_check_http(baton, thread); } now = apr_time_now();