From: Eric Covener Date: Sun, 13 Apr 2014 17:26:30 +0000 (+0000) Subject: stop leaking websockets backend connections (trunk only) X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a5f21cb511062ba7175496abb4c4039c373482b5;p=thirdparty%2Fapache%2Fhttpd.git stop leaking websockets backend connections (trunk only) git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1587057 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index a3fb8c64a5b..75c14ce94e4 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ -*- coding: utf-8 -*- Changes with Apache 2.5.0 + *) mod_proxy_wstunnel: Stop leaking websockets backend connections under + event MPMi (trunk-only). [Eric Covener] + *) mod_proxy_wstunnel: Don't issue AH02447 and log a 500 on routine hangups from websockets origin servers. PR 56299 [Yann Ylavic, Edward Lu , Eric Covener] diff --git a/modules/proxy/mod_proxy_wstunnel.c b/modules/proxy/mod_proxy_wstunnel.c index 8dcd4e72531..d5e42b97fdc 100644 --- a/modules/proxy/mod_proxy_wstunnel.c +++ b/modules/proxy/mod_proxy_wstunnel.c @@ -28,6 +28,7 @@ typedef struct ws_baton_t { apr_bucket_brigade *bb; int is_client; apr_pool_t *subpool; + char *scheme; } ws_baton_t; static int proxy_wstunnel_transfer(request_rec *r, conn_rec *c_i, conn_rec *c_o, @@ -138,6 +139,7 @@ static void proxy_wstunnel_callback(void *b) { } else { ap_mpm_unregister_socket_callback(sockets, baton->subpool); + ap_proxy_release_connection(baton->scheme, baton->proxy_connrec, baton->r->server); apr_thread_mutex_unlock(baton->r->invoke_mtx); ap_finalize_request_protocol(baton->r); ap_process_request_after_handler(baton->r); @@ -297,7 +299,7 @@ static int ap_proxy_wstunnel_request(apr_pool_t *p, request_rec *r, proxy_worker *worker, proxy_server_conf *conf, apr_uri_t *uri, - char *url, char *server_portstr) + char *url, char *server_portstr, char *scheme) { apr_status_t rv = APR_SUCCESS; apr_pollset_t *pollset; @@ -379,6 +381,7 @@ static int ap_proxy_wstunnel_request(apr_pool_t *p, request_rec *r, baton->server_soc = sock; baton->proxy_connrec = conn; baton->bb = bb; + baton->scheme = scheme; apr_pool_create(&baton->subpool, r->pool); status = proxy_wstunnel_pump(baton, apr_time_from_sec(5)); @@ -476,7 +479,7 @@ static int proxy_wstunnel_handler(request_rec *r, proxy_worker *worker, /* Step Three: Process the Request */ status = ap_proxy_wstunnel_request(p, r, backend, worker, conf, uri, locurl, - server_portstr); + server_portstr, scheme); break; }