Greg Ames wrote:

> We ought to be able to have our cake and eat it too.  

What about this?

Index: modules/http/http_request.c
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/http/http_request.c,v
retrieving revision 1.148
diff -u -d -b -r1.148 http_request.c
--- modules/http/http_request.c 20 Jun 2002 19:34:28 -0000      1.148
+++ modules/http/http_request.c 20 Jun 2002 21:56:03 -0000
@@ -120,10 +120,12 @@
     if (r->status != HTTP_OK) {
         recursive_error = type;
 
+        if (!ap_status_drops_connection(type)) {
         while (r->prev && (r->prev->status != HTTP_OK))
             r = r->prev;        /* Get back to original error */
 
         type = r->status;
+        }
         custom_response = NULL; /* Do NOT retry the custom thing! */
     }

Actually, I think we can do better, but my dog needs to go outside soon.  It
bothers me that this is changing/not changing the r that the rest of the
function uses depending on the status code.  I think the main reason that it
looks for the original error is so that ap_send_error_resonse can report both
errors when there are recursive errors.  We could use a different variable than
r here (so the original r never gets changed) and pass that to
ap_send_error_response, and also avoid whacking "type".

Greg

Reply via email to