You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by yl...@apache.org on 2015/02/05 18:36:24 UTC
svn commit: r1657636 - in /httpd/httpd/trunk: CHANGES
modules/proxy/mod_proxy_connect.c modules/proxy/mod_proxy_wstunnel.c
Author: ylavic
Date: Thu Feb 5 17:36:23 2015
New Revision: 1657636
URL: http://svn.apache.org/r1657636
Log:
mod_proxy_{connect,wstunnel}: If both client and backend sides get readable
at the same time, don't ignore errors while forwarding from the first side
if none occurs next on the other side.
Modified:
httpd/httpd/trunk/CHANGES
httpd/httpd/trunk/modules/proxy/mod_proxy_connect.c
httpd/httpd/trunk/modules/proxy/mod_proxy_wstunnel.c
Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=1657636&r1=1657635&r2=1657636&view=diff
==============================================================================
--- httpd/httpd/trunk/CHANGES [utf-8] (original)
+++ httpd/httpd/trunk/CHANGES [utf-8] Thu Feb 5 17:36:23 2015
@@ -6,6 +6,10 @@ Changes with Apache 2.5.0
calls r:wsupgrade() can cause a child process crash.
[Edward Lu <Chaosed0 gmail.com>]
+ *) mod_proxy_connect/wstunnel: If both client and backend sides get readable
+ at the same time, don't ignore errors while forwarding from the first side
+ if none occurs next on the other side. [Yann Ylavic]
+
*) mod_lua: After a r:wsupgrade(), mod_lua was not properly
responding to a websockets PING but instead invoking the specified
script. PR57524. [Edward Lu <Chaosed0 gmail.com>]
Modified: httpd/httpd/trunk/modules/proxy/mod_proxy_connect.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy_connect.c?rev=1657636&r1=1657635&r2=1657636&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/mod_proxy_connect.c (original)
+++ httpd/httpd/trunk/modules/proxy/mod_proxy_connect.c Thu Feb 5 17:36:23 2015
@@ -414,8 +414,8 @@ static int proxy_connect_handler(request
/* r->sent_bodyct = 1;*/
while (1) { /* Infinite loop until error (one side closes the connection) */
- if ((rv = apr_pollset_poll(pollset, -1, &pollcnt, &signalled))
- != APR_SUCCESS) {
+ rv = apr_pollset_poll(pollset, -1, &pollcnt, &signalled);
+ if (rv != APR_SUCCESS) {
if (APR_STATUS_IS_EINTR(rv)) {
continue;
}
@@ -438,10 +438,10 @@ static int proxy_connect_handler(request
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(01025)
"sock was readable");
#endif
- rv = proxy_connect_transfer(r, backconn, c, bb, "sock");
+ rv |= proxy_connect_transfer(r, backconn, c, bb, "sock");
}
else if (pollevent & APR_POLLERR) {
- rv = APR_EPIPE;
+ rv |= APR_EPIPE;
backconn->aborted = 1;
ap_log_rerror(APLOG_MARK, APLOG_NOTICE, 0, r, APLOGNO(01026)
"err on backconn");
@@ -454,17 +454,17 @@ static int proxy_connect_handler(request
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(01027)
"client was readable");
#endif
- rv = proxy_connect_transfer(r, c, backconn, bb, "client");
+ rv |= proxy_connect_transfer(r, c, backconn, bb, "client");
}
else if (pollevent & APR_POLLERR) {
- rv = APR_EPIPE;
+ rv |= APR_EPIPE;
c->aborted = 1;
ap_log_rerror(APLOG_MARK, APLOG_NOTICE, 0, r, APLOGNO(02827)
"err on client");
}
}
else {
- rv = APR_EBADF;
+ rv |= APR_EBADF;
ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(01028)
"unknown socket in pollset");
}
Modified: httpd/httpd/trunk/modules/proxy/mod_proxy_wstunnel.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy_wstunnel.c?rev=1657636&r1=1657635&r2=1657636&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/mod_proxy_wstunnel.c (original)
+++ httpd/httpd/trunk/modules/proxy/mod_proxy_wstunnel.c Thu Feb 5 17:36:23 2015
@@ -55,8 +55,8 @@ static int proxy_wstunnel_pump(ws_baton_
apr_bucket_brigade *bb = baton->bb;
while(1) {
- if ((rv = apr_pollset_poll(pollset, timeout, &pollcnt, &signalled))
- != APR_SUCCESS) {
+ rv = apr_pollset_poll(pollset, timeout, &pollcnt, &signalled);
+ if (rv != APR_SUCCESS) {
if (APR_STATUS_IS_EINTR(rv)) {
continue;
}
@@ -86,16 +86,16 @@ static int proxy_wstunnel_pump(ws_baton_
if (pollevent & (APR_POLLIN | APR_POLLHUP)) {
ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r, APLOGNO(02446)
"sock was readable");
- rv = proxy_wstunnel_transfer(r, backconn, c, bb, "sock");
+ rv |= proxy_wstunnel_transfer(r, backconn, c, bb, "sock");
}
else if (pollevent & APR_POLLERR) {
- rv = APR_EPIPE;
+ rv |= APR_EPIPE;
backconn->aborted = 1;
ap_log_rerror(APLOG_MARK, APLOG_NOTICE, 0, r, APLOGNO(02447)
"error on backconn");
}
else {
- rv = APR_EGENERAL;
+ rv |= APR_EGENERAL;
ap_log_rerror(APLOG_MARK, APLOG_NOTICE, 0, r, APLOGNO(02605)
"unknown event on backconn %d", pollevent);
}
@@ -105,22 +105,22 @@ static int proxy_wstunnel_pump(ws_baton_
if (pollevent & (APR_POLLIN | APR_POLLHUP)) {
ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r, APLOGNO(02448)
"client was readable");
- rv = proxy_wstunnel_transfer(r, c, backconn, bb, "client");
+ rv |= proxy_wstunnel_transfer(r, c, backconn, bb, "client");
}
else if (pollevent & APR_POLLERR) {
- rv = APR_EPIPE;
+ rv |= APR_EPIPE;
c->aborted = 1;
ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r, APLOGNO(02607)
"error on client conn");
}
else {
- rv = APR_EGENERAL;
+ rv |= APR_EGENERAL;
ap_log_rerror(APLOG_MARK, APLOG_NOTICE, 0, r, APLOGNO(02606)
"unknown event on client conn %d", pollevent);
}
}
else {
- rv = APR_EBADF;
+ rv |= APR_EBADF;
ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(02449)
"unknown socket in pollset");
}