Hi,

This [attached] seems to still work in mp1 land and all the A::SL tests still 
pass.
I haven't tried mp2 yet. Does this seem a like a route we want to go ?

I envision an Apache2::SizeLimit package with '*' aliasing of functions or 
wrappers to this one
and no real code.....?

P.S.
  Dave, are you subscribed here ?, I'll stop CC'ing you if so.


-- 
------------------------------------------------------------------------
Philip M. Gollucci ([EMAIL PROTECTED]) 323.219.4708
Consultant / http://p6m7g8.net/Resume/resume.shtml
Senior Software Engineer - TicketMaster - http://ticketmaster.com
1024D/A79997FA F357 0FDD 2301 6296 690F  6A47 D55A 7172 A799 97F

"In all that I've done wrong I know I must have done something right to
deserve a hug every morning and butterfly kisses at night."
Index: lib/Apache/SizeLimit.pm
===================================================================
--- lib/Apache/SizeLimit.pm     (revision 422654)
+++ lib/Apache/SizeLimit.pm     (working copy)
@@ -16,10 +16,37 @@
 package Apache::SizeLimit;
 
 use strict;
-
-use Apache::Constants qw(DECLINED OK);
 use Config;
 
+use constant MP2 => (exists $ENV{MOD_PERL_API_VERSION} &&
+                     $ENV{MOD_PERL_API_VERSION} == 2) ? 1 : 0;
+
+BEGIN {
+    my @constants = qw(OK DECLINED);
+    if (MP2) {
+        require mod_perl2;
+
+        require APR::Pool;
+        require Apache2::MPM;
+        require Apache2::RequestRec;
+        require Apache2::RequestUtil;
+        require ModPerl::Util;
+
+        require Apache2::Const;
+        import Apache2::Const @constants;
+
+        die "Apache2::SizeLimit at the moment works only with non-threaded 
MPMs"
+            if Apache2::MPM->is_threaded();
+    }
+    elsif (defined $modperl::VERSION && $modperl::VERSION > 1 &&
+           $modperl::VERSION < 1.99) {
+        require Apache;
+
+        require Apache::Constants;
+        import Apache::Constants @constants;
+    }
+}
+
 use vars qw(
     $VERSION
     $REQUEST_COUNT
@@ -67,24 +94,35 @@
 
 sub handler ($$) {
     my $class = shift;
-    my $r = shift || Apache->request;
+    my $r = shift || (MP2 ? Apache2::RequestUtil->request() : Apache->request);
 
-    return DECLINED unless $r->is_main();
+    if (MP2) {
+        return Apache2::Const::DECLINED() if $r->is_initial_req();
 
-    # we want to operate in a cleanup handler
-    if ( $r->current_callback eq 'PerlCleanupHandler' ) {
-        return $class->_exit_if_too_big($r);
+        if (ModPerl::Util::current_callback() eq 'PerlCleanupHandler') {
+            return $class->_exit_if_too_big($r);
+        }
+        else {
+            $class->add_cleanup_handler($r);
+        }
     }
     else {
-        $class->add_cleanup_handler($r);
+        return Apache::Constants::DECLINED() unless $r->is_main();
+
+        if ( $r->current_callback eq 'PerlCleanupHandler' ) {
+            return $class->_exit_if_too_big($r);
+        }
+        else {
+            $class->add_cleanup_handler($r);
+        }
     }
 
-    return DECLINED;
+    return MP2 ? Apache2::Const::DECLINED() : Apache::Constants::DECLINED();
 }
 
 sub add_cleanup_handler {
     my $class = shift;
-    my $r = shift || Apache->request;
+    my $r = shift || (MP2 ? Apache2::RequestUtil->request() : Apache->request);
 
     return unless $r;
     return if $r->pnotes('size_limit_cleanup');
@@ -93,18 +131,20 @@
     # test it, since apparently it does not push a handler onto the
     # PerlCleanupHandler phase. That means that there's no way to use
     # $r->get_handlers() to check the results of calling this method.
-    $r->push_handlers( 'PerlCleanupHandler',
-                       sub { $class->_exit_if_too_big() } );
-    $r->pnotes( size_limit_cleanup => 1 );
+    $r->push_handlers(
+                      'PerlCleanupHandler',
+                      sub { $class->_exit_if_too_big() }
+                     );
+    $r->pnotes('size_limit_cleanup', 1);
 }
 
 sub _exit_if_too_big {
     my $class = shift;
     my $r = shift;
 
-    return DECLINED
-        if ( $CHECK_EVERY_N_REQUESTS
-             && ( $REQUEST_COUNT++ % $CHECK_EVERY_N_REQUESTS ) );
+    return (MP2 ? Apache2::Const::DECLINED() : Apache::Constants::DECLINED())
+        if $CHECK_EVERY_N_REQUESTS
+            && ($REQUEST_COUNT++ % $CHECK_EVERY_N_REQUESTS);
 
     $START_TIME ||= time;
 
@@ -119,6 +159,9 @@
             $msg .= " REQUESTS=$REQUEST_COUNT  LIFETIME=$e seconds";
             $class->_error_log($msg);
 
+            ## XXX: some different logic here
+            ## XXX: child_terminate() seems to work in WIN32 in 2.x
+            ## XXX: also so getppid() foo
             if (IS_WIN32) {
                 # child_terminate() is disabled in win32 Apache
                 CORE::exit(-2);
@@ -134,7 +177,7 @@
             $class->_error_log($msg);
         }
     }
-    return OK;
+    return MP2 ? Apache2::Const::OK() : Apache::Constants::OK();
 }
 
 # REVIEW - Why doesn't this use $r->warn or some other

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to