From: Daniel Earl Poirier Date: Wed, 8 Dec 2010 19:31:34 +0000 (+0000) Subject: Backport r1031551 X-Git-Tag: 2.2.18~260 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=83fd51b4fb256a675fedc61b6dbfdc66e23d0900;p=thirdparty%2Fapache%2Fhttpd.git Backport r1031551 proxy_connect: Don't give up in the middle of a CONNECT tunnel when the child process is starting to exit. PR50220. [Eric Covener] git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@1043628 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 6cc4db6a88e..a0cc2d68a2a 100644 --- a/CHANGES +++ b/CHANGES @@ -1,7 +1,8 @@ - -*- coding: utf-8 -*- + -*- coding: utf-8 -*- Changes with Apache 2.2.18 - + *) proxy_connect: Don't give up in the middle of a CONNECT tunnel + when the child process is starting to exit. PR50220. [Eric Covener] Changes with Apache 2.2.17 diff --git a/STATUS b/STATUS index 9d3ade93eb0..b4f5ccf36ca 100644 --- a/STATUS +++ b/STATUS @@ -97,12 +97,6 @@ PATCHES ACCEPTED TO BACKPORT FROM TRUNK: 2.2.x patch: trunk patch works +1: minfrin, jim, covener - * mod_proxy_connect: don't break proxy connections when EINTR is received - during poll PR50220. - Trunk patch: http://svn.apache.org/viewvc?rev=1031551&view=rev - 2.2.x patch: http://people.apache.org/~covener/patches/2.2.x-proxy_connect_eintr.diff - +1 covener, trawick, poirier - PATCHES PROPOSED TO BACKPORT FROM TRUNK: [ New proposals should be added at the end of the list ] diff --git a/modules/proxy/mod_proxy_connect.c b/modules/proxy/mod_proxy_connect.c index d66a50d8193..6de44d15525 100644 --- a/modules/proxy/mod_proxy_connect.c +++ b/modules/proxy/mod_proxy_connect.c @@ -288,6 +288,9 @@ static int proxy_connect_handler(request_rec *r, proxy_worker *worker, while (1) { /* Infinite loop until error (one side closes the connection) */ if ((rv = apr_pollset_poll(pollset, -1, &pollcnt, &signalled)) != APR_SUCCESS) { + if (APR_STATUS_IS_EINTR(rv)) { + continue; + } apr_socket_close(sock); ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, "proxy: CONNECT: error apr_poll()"); return HTTP_INTERNAL_SERVER_ERROR;