Author: stas
Date: Tue Jun 28 02:14:53 2005
New Revision: 202146

URL: http://svn.apache.org/viewcvs?rev=202146&view=rev
Log:
filter flushing now doesn't croak on connection reset
(ECONNRESET/ECONNABORTED), but just logs the event on the 'info'
level.


Modified:
    perl/modperl/trunk/Changes
    perl/modperl/trunk/src/modules/perl/modperl_filter.c

Modified: perl/modperl/trunk/Changes
URL: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/Changes?rev=202146&r1=202145&r2=202146&view=diff
==============================================================================
--- perl/modperl/trunk/Changes (original)
+++ perl/modperl/trunk/Changes Tue Jun 28 02:14:53 2005
@@ -12,6 +12,10 @@
 
 =item 2.0.2-dev
 
+filter flushing now doesn't croak on connection reset
+(ECONNRESET/ECONNABORTED), but just logs the event on the 'info'
+level. [Stas]
+
 RPM Friendly builds : [Gozer]
 - make dist tarballs can now be built directly into RPMs with rpmbuild
 - Added a new target 'make rpm' to directly build rpms from a checkout

Modified: perl/modperl/trunk/src/modules/perl/modperl_filter.c
URL: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/src/modules/perl/modperl_filter.c?rev=202146&r1=202145&r2=202146&view=diff
==============================================================================
--- perl/modperl/trunk/src/modules/perl/modperl_filter.c (original)
+++ perl/modperl/trunk/src/modules/perl/modperl_filter.c Tue Jun 28 02:14:53 
2005
@@ -470,6 +470,23 @@
 }
 
 
+#define MP_RUN_CROAK_RESET_OK(func)                                     \
+    {                                                                   \
+        apr_status_t rc = func(filter);                                 \
+        if (rc != APR_SUCCESS) {                                        \
+            if (APR_STATUS_IS_ECONNRESET(rc) ||                         \
+                APR_STATUS_IS_ECONNABORTED(rc)) {                       \
+                ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,              \
+                             "Apache2::Filter internal flush got: %s",  \
+                             modperl_error_strerror(aTHX_ rc));         \
+            }                                                           \
+            else {                                                      \
+                modperl_croak(aTHX_ rc,                                 \
+                              "Apache2::Filter internal flush");        \
+            }                                                           \
+        }                                                               \
+    }
+
 int modperl_run_filter(modperl_filter_t *filter)
 {
     AV *args = Nullav;
@@ -534,12 +551,10 @@
             apr_brigade_destroy(filter->bb_in);
             filter->bb_in = NULL;
         }
-        MP_RUN_CROAK(modperl_input_filter_flush(filter),
-                     "Apache2::Filter");
+        MP_RUN_CROAK_RESET_OK(modperl_input_filter_flush);
     }
     else {
-        MP_RUN_CROAK(modperl_output_filter_flush(filter),
-                     "Apache2::Filter");
+        MP_RUN_CROAK_RESET_OK(modperl_output_filter_flush);
     }
 
     MP_FILTER_RESTORE_ERRSV(errsv);
@@ -551,7 +566,6 @@
 
     return status;
 }
-
 
 /* unrolled APR_BRIGADE_FOREACH loop */
 


Reply via email to