stas 2004/09/16 09:36:29
Modified: . Changes lib/Apache compat.pm src/modules/perl modperl_util.c t/response/TestAPI aplog.pm t/response/TestCompat apache.pm t/response/TestVhost log.pm xs/Apache/Log Apache__Log.h xs/maps modperl_functions.map Log: Apache::Log changes: [Stas] - moved to compat: Apache::warn, Apache->warn, Apache::Server->warn, Apache::Server::warn - re-enabled $r->warn - removed support for Apache::ServerRec->warn (Apache::ServerRec::warn is still there) Revision Changes Path 1.485 +7 -0 modperl-2.0/Changes Index: Changes =================================================================== RCS file: /home/cvs/modperl-2.0/Changes,v retrieving revision 1.484 retrieving revision 1.485 diff -u -u -r1.484 -r1.485 --- Changes 14 Sep 2004 17:48:15 -0000 1.484 +++ Changes 16 Sep 2004 16:36:28 -0000 1.485 @@ -12,6 +12,13 @@ =item 1.99_17-dev +Apache::Log changes: [Stas] + - moved to compat: Apache::warn, Apache->warn, Apache::Server->warn, + Apache::Server::warn + - re-enabled $r->warn + - removed support for Apache::ServerRec->warn + (Apache::ServerRec::warn is still there) + Apache::Directive conftree() changed from class method to regular subroutine [Gozer] 1.122 +11 -1 modperl-2.0/lib/Apache/compat.pm Index: compat.pm =================================================================== RCS file: /home/cvs/modperl-2.0/lib/Apache/compat.pm,v retrieving revision 1.121 retrieving revision 1.122 diff -u -u -r1.121 -r1.122 --- compat.pm 14 Sep 2004 00:08:27 -0000 1.121 +++ compat.pm 16 Sep 2004 16:36:28 -0000 1.122 @@ -286,6 +286,11 @@ our $AddPerlVersion = 1; +sub warn { + shift if @_ and $_[0] eq 'Apache::Server'; + Apache::ServerRec::warn(@_); +} + package Apache; sub server_root_relative { @@ -343,6 +348,11 @@ Apache->server->log_error(@_); } +sub warn { + shift if @_ and $_[0] eq 'Apache'; + Apache::ServerRec::warn(@_); +} + sub httpd_conf { shift; my $obj; @@ -452,7 +462,7 @@ } else { my $name = (caller(1))[3]; - warn "Usage: \$r->$name([key [,val]])"; + $r->warn("Usage: \$r->$name([key [,val]])"); } } 1.83 +8 -6 modperl-2.0/src/modules/perl/modperl_util.c Index: modperl_util.c =================================================================== RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_util.c,v retrieving revision 1.82 retrieving revision 1.83 diff -u -u -r1.82 -r1.83 --- modperl_util.c 10 Sep 2004 00:54:54 -0000 1.82 +++ modperl_util.c 16 Sep 2004 16:36:29 -0000 1.83 @@ -85,6 +85,12 @@ return SvROK(sv) ? SvRV(sv) : sv; } + +/* notice that if sv is not an Apache::ServerRec object and + * Apache->request is not available, the returned global object might + * be not thread-safe under threaded mpms, so use with care + */ + MP_INLINE server_rec *modperl_sv2server_rec(pTHX_ SV *sv) { if (SvOBJECT(sv) || (SvROK(sv) && (SvTYPE(SvRV(sv)) == SVt_PVMG))) { @@ -100,7 +106,6 @@ } } - MP_CROAK_IF_THREADS_STARTED("using global server object"); /* modperl_global_get_server_rec is not thread safe w/o locking */ return modperl_global_get_server_rec(); } @@ -131,15 +136,12 @@ } } - if (!sv) { + /* might be Apache::ServerRec::warn method */ + if (!sv && !(classname && SvPOK(in) && !strEQ(classname, SvPVX(in)))) { request_rec *r = NULL; (void)modperl_tls_get_request_rec(&r); if (!r) { - if (classname && SvPOK(in) && !strEQ(classname, SvPVX(in))) { - /* might be Apache::{ServerRec,RequestRec}-> dual method */ - return NULL; - } Perl_croak(aTHX_ "Apache->%s called without setting Apache->request!", cv ? GvNAME(CvGV(cv)) : "unknown"); 1.18 +17 -1 modperl-2.0/t/response/TestAPI/aplog.pm Index: aplog.pm =================================================================== RCS file: /home/cvs/modperl-2.0/t/response/TestAPI/aplog.pm,v retrieving revision 1.17 retrieving revision 1.18 diff -u -u -r1.17 -r1.18 --- aplog.pm 10 Jul 2004 00:37:06 -0000 1.17 +++ aplog.pm 16 Sep 2004 16:36:29 -0000 1.18 @@ -6,7 +6,9 @@ use Apache::Test; use Apache::TestUtil; +use Apache::ServerRec qw(warn); # override warn locally use Apache::RequestRec (); +use Apache::RequestUtil (); use Apache::Log (); use Apache::MPM (); @@ -80,8 +82,22 @@ ok 1; } - Apache->warn("Apache->warn test ok"); + t_server_log_warn_is_expected(); $s->warn('$s->warn test ok'); + + { + t_server_log_warn_is_expected(); + # this uses global server to get $s internally + Apache::ServerRec::warn("Apache::ServerRec::warn test ok"); + + Apache->request($r); + t_server_log_warn_is_expected(); + # this uses the global $r to get $s internally + Apache::ServerRec::warn("Apache::ServerRec::warn test ok"); + } + + t_server_log_warn_is_expected(); + warn "warn test ok"; Apache::OK; } 1.20 +19 -2 modperl-2.0/t/response/TestCompat/apache.pm Index: apache.pm =================================================================== RCS file: /home/cvs/modperl-2.0/t/response/TestCompat/apache.pm,v retrieving revision 1.19 retrieving revision 1.20 diff -u -u -r1.19 -r1.20 --- apache.pm 26 Aug 2004 00:00:33 -0000 1.19 +++ apache.pm 16 Sep 2004 16:36:29 -0000 1.20 @@ -9,16 +9,17 @@ use Apache::TestUtil; use Apache::Test; -use File::Spec::Functions qw(catfile canonpath); use ModPerl::Util (); use Apache::compat (); use Apache::Constants qw(DIR_MAGIC_TYPE :common :response); +use File::Spec::Functions qw(catfile canonpath); + sub handler { my $r = shift; - plan $r, tests => 17; + plan $r, tests => 21; $r->send_http_header('text/plain'); @@ -42,6 +43,22 @@ t_server_log_error_is_expected(); Apache::log_error("Apache::log_error test ok"); + ok 1; + + t_server_log_warn_is_expected(); + Apache->warn('Apache->warn ok'); + ok 1; + + t_server_log_warn_is_expected(); + Apache::warn('Apache::warn ok'); + ok 1; + + t_server_log_warn_is_expected(); + Apache::Server->warn('Apache::Server->warn ok'); + ok 1; + + t_server_log_warn_is_expected(); + Apache::Server::warn('Apache::Server::warn ok'); ok 1; # explicitly imported 1.4 +1 -3 modperl-2.0/t/response/TestVhost/log.pm Index: log.pm =================================================================== RCS file: /home/cvs/modperl-2.0/t/response/TestVhost/log.pm,v retrieving revision 1.3 retrieving revision 1.4 diff -u -u -r1.3 -r1.4 --- log.pm 10 Sep 2004 00:49:25 -0000 1.3 +++ log.pm 16 Sep 2004 16:36:29 -0000 1.4 @@ -22,16 +22,14 @@ my @methods1 = ( '$r->log->warn', '$r->log_error', + '$r->warn', '$s->log->warn', '$s->log_error', '$s->warn', ); my @methods2 = ( - 'Apache->warn', - 'Apache::ServerRec->warn', 'Apache::ServerRec::warn', - 'Apache::warn', 'warn', ); 1.21 +13 -24 modperl-2.0/xs/Apache/Log/Apache__Log.h Index: Apache__Log.h =================================================================== RCS file: /home/cvs/modperl-2.0/xs/Apache/Log/Apache__Log.h,v retrieving revision 1.20 retrieving revision 1.21 diff -u -u -r1.20 -r1.21 --- Apache__Log.h 10 Sep 2004 00:54:55 -0000 1.20 +++ Apache__Log.h 16 Sep 2004 16:36:29 -0000 1.21 @@ -44,7 +44,6 @@ s = (server_rec *)SvObjIV(sv); } else { - MP_CROAK_IF_THREADS_STARTED("using global server object"); s = modperl_global_get_server_rec(); } @@ -269,6 +268,14 @@ XSRETURN_EMPTY; } +/* + * this function handles: + * $r->log_error + * $s->log_error + * $r->warn + * $s->warn + * Apache::ServerRec::warn + */ static XS(MPXS_Apache__Log_log_error) { dXSARGS; @@ -279,33 +286,16 @@ SV *sv = Nullsv; STRLEN n_a; - /* - * we support the following: - * Apache::warn - * Apache->warn - * Apache::ServerRec->log_error - * Apache::ServerRec->warn - * $r->log_error - * $r->warn - * $s->log_error - * $s->warn - */ - if (items > 1) { - if ((r = modperl_xs_sv2request_rec(aTHX_ ST(0), - "Apache::RequestRec", cv))) - { - s = r->server; - } - else if (sv_isa(ST(0), "Apache::ServerRec")) { + if (sv_isa(ST(0), "Apache::ServerRec")) { s = (server_rec *)SvObjIV(ST(0)); } - else if (SvPOK(ST(0)) && strEQ(SvPVX(ST(0)), "Apache::ServerRec")) { - MP_CROAK_IF_THREADS_STARTED("using global server object"); - s = modperl_global_get_server_rec(); + else if ((r = modperl_xs_sv2request_rec(aTHX_ ST(0), + "Apache::RequestRec", cv))) { + s = r->server; } } - + if (s) { i = 1; } @@ -316,7 +306,6 @@ s = r->server; } else { - MP_CROAK_IF_THREADS_STARTED("using global server object"); s = modperl_global_get_server_rec(); } } 1.88 +1 -3 modperl-2.0/xs/maps/modperl_functions.map Index: modperl_functions.map =================================================================== RCS file: /home/cvs/modperl-2.0/xs/maps/modperl_functions.map,v retrieving revision 1.87 retrieving revision 1.88 diff -u -u -r1.87 -r1.88 --- modperl_functions.map 9 Sep 2004 22:39:11 -0000 1.87 +++ modperl_functions.map 16 Sep 2004 16:36:29 -0000 1.88 @@ -123,15 +123,13 @@ SV *:DEFINE_log | | SV *:obj DEFINE_log_rerror | MPXS_Apache__Log_log_xerror | ... DEFINE_log_error | MPXS_Apache__Log_log_error | ... +DEFINE_warn | MPXS_Apache__Log_log_error | ... PACKAGE=Apache::ServerRec SV *:DEFINE_log | | SV *:obj DEFINE_log_serror | MPXS_Apache__Log_log_xerror | ... DEFINE_log_error | MPXS_Apache__Log_log_error | ... DEFINE_warn | MPXS_Apache__Log_log_error | ... - -PACKAGE=Apache -DEFINE_warn | MPXS_Apache__Log_log_error | ... MODULE=Apache::SubProcess PACKAGE=Apache::RequestRec # ap_subprocess_ won't work