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