]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Fix the fixed timeout, thanks RĂ¼diger.
authorJean-Frederic Clere <jfclere@apache.org>
Wed, 10 Mar 2021 16:24:21 +0000 (16:24 +0000)
committerJean-Frederic Clere <jfclere@apache.org>
Wed, 10 Mar 2021 16:24:21 +0000 (16:24 +0000)
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

modules/proxy/mod_proxy_hcheck.c

index 9986f1a9bd78a72a41be05ace952410ad9a52168..b78147beeddc3c81218ef35e81b81675f826c0f0 100644 (file)
@@ -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();