]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
* Let the proxy handler know that the backend connection broke after we have
authorRuediger Pluem <rpluem@apache.org>
Sun, 11 Dec 2005 00:50:21 +0000 (00:50 +0000)
committerRuediger Pluem <rpluem@apache.org>
Sun, 11 Dec 2005 00:50:21 +0000 (00:50 +0000)
  sent the headers.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@355837 13f79535-47bb-0310-9956-ffa450edef68

modules/proxy/mod_proxy_ajp.c

index 22e7cefcd7d030dba8bd4d5567d3cfcaafd6912c..7d79eba71382b2d6c41ffefe2afaa5d7d4a96775 100644 (file)
@@ -138,6 +138,7 @@ static int ap_proxy_ajp_request(apr_pool_t *p, request_rec *r,
     int havebody = 1;
     int isok = 1;
     apr_off_t bb_len;
+    int data_sent = 0;
 #ifdef FLUSHING_BANDAID
     apr_int32_t conn_poll_fd;
     apr_pollfd_t *conn_poll;
@@ -348,6 +349,8 @@ static int ap_proxy_ajp_request(apr_pool_t *p, request_rec *r,
                                       "proxy: error processing body");
                         isok = 0;
                     }
+                    /* memorize that we sent data */
+                    data_sent = 1;
                     apr_brigade_cleanup(output_brigade);
                 }
                 else {
@@ -363,6 +366,8 @@ static int ap_proxy_ajp_request(apr_pool_t *p, request_rec *r,
                                   "proxy: error processing body");
                     isok = 0;
                 }
+                /* memorize that we sent data */
+                data_sent = 1;
                 break;
             default:
                 isok = 0;
@@ -409,7 +414,15 @@ static int ap_proxy_ajp_request(apr_pool_t *p, request_rec *r,
                      "proxy: send body failed to %pI (%s)",
                      conn->worker->cp->addr,
                      conn->worker->hostname);
-        return HTTP_SERVICE_UNAVAILABLE;
+        /*
+         * If we have sent data (and thus the headers) we must let the
+         * others know.
+         */
+        if (data_sent) {
+            return PROXY_BACKEND_BROKEN;
+        } else {
+            return HTTP_SERVICE_UNAVAILABLE;
+        }
     }
 
     /* Nice we have answer to send to the client */