Batara Kesuma wrote:
Hi,
I am not sure if this is mod_perl bug. I have this error in my log:
[Mon Mar 15 00:12:38 2004] [error] [client 211.128.98.215] failed to get
bucket brigade: 70014:End of file found, referer:
http://domain.com/edit_photo.pl

There are like thousands of them. The system will freeze due to high load,
and the only way to restore it is to restart httpd. The edit_photo.pl is a
script to upload photo to the server and then resize it using GD. I don't
have any idea at all what is happening. Anyone has an idea? Please help.

My env:
perl-5.8.3-10
httpd-2.0.48-1.2
mod_perl-1.99_12-2

Please try this patch (you may need to upgrade to 1.99_13 first):



Index: src/modules/perl/modperl_io_apache.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_io_apache.c,v
retrieving revision 1.17
diff -u -r1.17 modperl_io_apache.c
--- src/modules/perl/modperl_io_apache.c 4 Mar 2004 06:01:07 -0000 1.17
+++ src/modules/perl/modperl_io_apache.c 15 Mar 2004 21:17:57 -0000
@@ -292,8 +292,20 @@


         rc = ap_get_brigade(r->input_filters, bb, AP_MODE_READBYTES,
                             APR_BLOCK_READ, len);
-        if (rc != APR_SUCCESS) {
+        if (rc != APR_SUCCESS) {
             char *error;
+
+            /* EOF is not really an error. A possible reason for
+             * getting EOF: if EOS came in the same bb with data, or
+             * more data than available was asked for, the fact that
+             * EOS has passed through wasn't stored
+             * anywhere. Therefore a request to get another bb after
+             * EOS was seen, may result in a valid EOF response */
+            if (rc == APR_EOF) {
+                MP_TRACE_o(MP_FUNC, "wanted %db, read EOF", wanted);
+                return 0;
+            }
+
             /* if we fail here, we want to just return and stop trying
              * to read data from the client.
              */
@@ -350,7 +362,7 @@

         /* XXX: what happens if the downstream filter returns more
          * data than the caller has asked for? We can't return more
-         * data that requested, so it needs to be stored somewhere and
+         * data than requested, so it needs to be stored somewhere and
          * dealt with on the subsequent calls to this function. or may
          * be we should just assert, blaming a bad filter. at the
          * moment I couldn't find a spec telling whether it's wrong


__________________________________________________________________ Stas Bekman JAm_pH ------> Just Another mod_perl Hacker http://stason.org/ mod_perl Guide ---> http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com

--
Report problems: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html



Reply via email to