Sorry I don't have much in the way of details, but we had this problem several months 
ago (probably in a previous version of mod_perl), but it silently went away.
(I'm reminded of it because recently I was reviewing the handler() of our recently 
open-sourced embedded parser, Apache::XPP, and found that the constants had been 
hard-coded to avoid the AUTOLOAD() spinning.  I put the constant calls back in :-)

Enjoy,
David

At 8.17 -0700 9/28/2000, Doug MacEachern wrote:
>On Mon, 26 Jun 2000, Jim Winstead wrote:
>
>> We were seeing some servers spin out of control (allocating memory
>> slowly) in Apace::Constants::AUTOLOAD (which apparently has been
>> reported in the mailing list before).
>>
>> The attached patch fixes the problems for us. Could someone who
>> understands what is going on here shed some light?
>
>i still don't understand how __AUTOLOAD can be undefined inside the
>server.  this patch adds an extra check that will prevent recursion if
>__AUTOLOAD is somehow undefined and print a stacktrace to give some idea
>where the problem is.
>
>Index: Constants/Constants.pm
>===================================================================
>RCS file: /home/cvs/modperl/Constants/Constants.pm,v
>retrieving revision 1.20
>diff -u -r1.20 Constants.pm
>--- Constants/Constants.pm     2000/03/03 20:42:01     1.20
>+++ Constants/Constants.pm     2000/09/28 15:12:36
>@@ -17,9 +17,16 @@
> if ($ENV{MOD_PERL}) {
>     #outside of mod_perl this will recurse looking for __AUTOLOAD, grr
>     *AUTOLOAD  = sub {
>-      #why must we stringify first???
>-      __AUTOLOAD() if "$Apache::Constants::AUTOLOAD";
>-      goto &$Apache::Constants::AUTOLOAD;
>+        if (defined &__AUTOLOAD) { #make extra sure we don't recurse
>+            #why must we stringify first???
>+            __AUTOLOAD() if "$Apache::Constants::AUTOLOAD";
>+            goto &$Apache::Constants::AUTOLOAD;
>+        }
>+        else {
>+            require Carp;
>+            Carp::confess("__AUTOLOAD is undefined, ",
>+                          "trying to AUTOLOAD $Apache::Constants::AUTOLOAD");
>+        }
>     };
> }
> 

Reply via email to