Author: pgollucci Date: Tue Aug 22 22:51:39 2006 New Revision: 433914 URL: http://svn.apache.org/viewvc?rev=433914&view=rev Log: o pull _exit_if_too_big into target specific o apr_child_terminate() works on Win32 in 2.x series.
Modified: perl/Apache-SizeLimit/trunk/lib/Apache/BaseSizeLimit.pm perl/Apache-SizeLimit/trunk/lib/Apache/SizeLimit.pm perl/Apache-SizeLimit/trunk/lib/Apache/SizeLimit2.pm Modified: perl/Apache-SizeLimit/trunk/lib/Apache/BaseSizeLimit.pm URL: http://svn.apache.org/viewvc/perl/Apache-SizeLimit/trunk/lib/Apache/BaseSizeLimit.pm?rev=433914&r1=433913&r2=433914&view=diff ============================================================================== --- perl/Apache-SizeLimit/trunk/lib/Apache/BaseSizeLimit.pm (original) +++ perl/Apache-SizeLimit/trunk/lib/Apache/BaseSizeLimit.pm Tue Aug 22 22:51:39 2006 @@ -64,45 +64,6 @@ $CHECK_EVERY_N_REQUESTS = shift; } -sub _exit_if_too_big { - my $class = shift; - my $r = shift; - - return DECLINED - if ($CHECK_EVERY_N_REQUESTS - && ($REQUEST_COUNT++ % $CHECK_EVERY_N_REQUESTS)); - - $START_TIME ||= time; - - if ($class->_limits_are_exceeded()) { - my ($size, $share, $unshared) = $class->_check_size(); - - if (IS_WIN32 || $class->_platform_getppid() > 1) { - # this is a child httpd - my $e = time - $START_TIME; - my $msg = "httpd process too big, exiting at SIZE=$size KB"; - $msg .= " SHARE=$share KB UNSHARED=$unshared" if ($share); - $msg .= " REQUESTS=$REQUEST_COUNT LIFETIME=$e seconds"; - $class->_error_log($msg); - - if (IS_WIN32) { - # child_terminate() is disabled in win32 Apache - CORE::exit(-2); - } - else { - $r->child_terminate(); - } - } - else { - # this is the main httpd, whose parent is init? - my $msg = "main process too big, SIZE=$size KB "; - $msg .= " SHARE=$share KB" if ($share); - $class->_error_log($msg); - } - } - return OK; -} - # REVIEW - Why doesn't this use $r->warn or some other # Apache/Apache::Log API? sub _error_log { Modified: perl/Apache-SizeLimit/trunk/lib/Apache/SizeLimit.pm URL: http://svn.apache.org/viewvc/perl/Apache-SizeLimit/trunk/lib/Apache/SizeLimit.pm?rev=433914&r1=433913&r2=433914&view=diff ============================================================================== --- perl/Apache-SizeLimit/trunk/lib/Apache/SizeLimit.pm (original) +++ perl/Apache-SizeLimit/trunk/lib/Apache/SizeLimit.pm Tue Aug 22 22:51:39 2006 @@ -16,8 +16,11 @@ package Apache::SizeLimit; use strict; +use Config; -use Apache::Constants qw(DECLINED OK); +use Apache::Constants (); + +use constant IS_WIN32 => $Config{'osname'} eq 'MSWin32' ? 1 : 0; use vars qw($VERSION); @@ -27,7 +30,7 @@ my $class = shift; my $r = shift || Apache->request; - return DECLINED unless $r->is_main(); + return Apache::Constants::DECLINED() unless $r->is_main(); # we want to operate in a cleanup handler if ($r->current_callback eq 'PerlCleanupHandler') { @@ -37,7 +40,7 @@ $class->add_cleanup_handler($r); } - return DECLINED; + return Apache::Constants::DECLINED(); } sub add_cleanup_handler { @@ -54,6 +57,45 @@ $r->push_handlers('PerlCleanupHandler', sub { $class->_exit_if_too_big(shift) }); $r->pnotes(size_limit_cleanup => 1); +} + +sub _exit_if_too_big { + my $class = shift; + my $r = shift; + + return Apache::Constants::DECLINED() + if ($CHECK_EVERY_N_REQUESTS + && ($REQUEST_COUNT++ % $CHECK_EVERY_N_REQUESTS)); + + $START_TIME ||= time; + + if ($class->_limits_are_exceeded()) { + my ($size, $share, $unshared) = $class->_check_size(); + + if (IS_WIN32 || $class->_platform_getppid() > 1) { + # this is a child httpd + my $e = time - $START_TIME; + my $msg = "httpd process too big, exiting at SIZE=$size KB"; + $msg .= " SHARE=$share KB UNSHARED=$unshared" if ($share); + $msg .= " REQUESTS=$REQUEST_COUNT LIFETIME=$e seconds"; + $class->_error_log($msg); + + if (IS_WIN32) { + # child_terminate() is disabled in win32 Apache + CORE::exit(-2); + } + else { + $r->child_terminate(); + } + } + else { + # this is the main httpd, whose parent is init? + my $msg = "main process too big, SIZE=$size KB "; + $msg .= " SHARE=$share KB" if ($share); + $class->_error_log($msg); + } + } + return Apache::Constants::OK(); } 1; Modified: perl/Apache-SizeLimit/trunk/lib/Apache/SizeLimit2.pm URL: http://svn.apache.org/viewvc/perl/Apache-SizeLimit/trunk/lib/Apache/SizeLimit2.pm?rev=433914&r1=433913&r2=433914&view=diff ============================================================================== --- perl/Apache-SizeLimit/trunk/lib/Apache/SizeLimit2.pm (original) +++ perl/Apache-SizeLimit/trunk/lib/Apache/SizeLimit2.pm Tue Aug 22 22:51:39 2006 @@ -16,12 +16,15 @@ package Apache2::SizeLimit; use strict; +use Config; use Apache2::RequestUtil (); use Apache2::Const -compile => qw (DECLINED OK); use ModPerl::Util (); +use constant IS_WIN32 => $Config{'osname'} eq 'MSWin32' ? 1 : 0; + # 2.x requires 5.6.x+ so 'our' is okay our $VERSION = '0.91-dev'; @@ -59,6 +62,39 @@ ); $r->pnotes(size_limit_cleanup => 1); +} + +sub _exit_if_too_big { + my $class = shift; + my $r = shift; + + return Apache2::Const::DECLINED + if ($CHECK_EVERY_N_REQUESTS + && ($REQUEST_COUNT++ % $CHECK_EVERY_N_REQUESTS)); + + $START_TIME ||= time; + + if ($class->_limits_are_exceeded()) { + my ($size, $share, $unshared) = $class->_check_size(); + + if (IS_WIN32 || $class->_platform_getppid() > 1) { + # this is a child httpd + my $e = time - $START_TIME; + my $msg = "httpd process too big, exiting at SIZE=$size KB"; + $msg .= " SHARE=$share KB UNSHARED=$unshared" if ($share); + $msg .= " REQUESTS=$REQUEST_COUNT LIFETIME=$e seconds"; + $class->_error_log($msg); + + $r->child_terminate(); + } + else { + # this is the main httpd, whose parent is init? + my $msg = "main process too big, SIZE=$size KB "; + $msg .= " SHARE=$share KB" if ($share); + $class->_error_log($msg); + } + } + return Apache2::Const::OK; } 1;