You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl-cvs@perl.apache.org by go...@apache.org on 2003/03/04 10:42:42 UTC
cvs commit: modperl-2.0/xs/tables/current/ModPerl FunctionTable.pm
gozer 2003/03/04 01:42:42
Modified: . Changes STATUS
src/modules/perl modperl_cmd.c modperl_util.c modperl_util.h
t/conf extra.last.conf.in
t/response/TestDirective perldo.pm
xs/tables/current/ModPerl FunctionTable.pm
Log:
$Apache::Server::SaveConfig added. When set to a true value,
will not clear the content of Apache::ReadConfig:: once <Perl >
sections are processed.
Revision Changes Path
1.143 +4 -0 modperl-2.0/Changes
Index: Changes
===================================================================
RCS file: /home/cvs/modperl-2.0/Changes,v
retrieving revision 1.142
retrieving revision 1.143
diff -u -r1.142 -r1.143
--- Changes 4 Mar 2003 00:56:26 -0000 1.142
+++ Changes 4 Mar 2003 09:42:41 -0000 1.143
@@ -10,6 +10,10 @@
=item 1.99_09-dev
+$Apache::Server::SaveConfig added. When set to a true value,
+will not clear the content of Apache::ReadConfig:: once <Perl >
+sections are processed. [Philippe M. Chiasson <gozer@cpan.org]
+
Apache::compat: support 1.0's Apache->push_handlers,
Apache->set_handlers and Apache->get_handlers [Stas]
1.38 +1 -2 modperl-2.0/STATUS
Index: STATUS
===================================================================
RCS file: /home/cvs/modperl-2.0/STATUS,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- STATUS 3 Mar 2003 03:50:55 -0000 1.37
+++ STATUS 4 Mar 2003 09:42:41 -0000 1.38
@@ -177,7 +177,6 @@
----
* Apache::PerlSections missing features for backwards compatibility:
- - $Apache::Server::SaveConfig
- $Apache::ReadConfig::DocumentRoot
- Apache::PerlSections->store(filename)
1.40 +10 -0 modperl-2.0/src/modules/perl/modperl_cmd.c
Index: modperl_cmd.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_cmd.c,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- modperl_cmd.c 3 Mar 2003 05:16:07 -0000 1.39
+++ modperl_cmd.c 4 Mar 2003 09:42:42 -0000 1.40
@@ -318,6 +318,8 @@
#define MP_DEFAULT_PERLSECTION_PACKAGE "Apache::ReadConfig"
#define MP_STRICT_PERLSECTIONS_SV \
get_sv("Apache::Server::StrictPerlSections", FALSE)
+#define MP_PERLSECTIONS_SAVECONFIG_SV \
+ get_sv("Apache::Server::SaveConfig", FALSE)
MP_CMD_SRV_DECLARE(perldo)
{
@@ -385,6 +387,7 @@
}
if (handler) {
+ SV *saveconfig;
modperl_handler_make_args(aTHX_ &args,
"Apache::CmdParms", parms,
"APR::Table", options,
@@ -394,6 +397,13 @@
SvREFCNT_dec((SV*)args);
+ if (!(saveconfig = MP_PERLSECTIONS_SAVECONFIG_SV) || !SvTRUE(saveconfig)) {
+ HV *symtab = (HV*)gv_stashpv(package_name, FALSE);
+ if (symtab) {
+ modperl_clear_symtab(aTHX_ symtab);
+ }
+ }
+
if (status != OK) {
return SvTRUE(ERRSV) ? SvPVX(ERRSV) :
apr_psprintf(p, "<Perl> handler %s failed with status=%d",
1.51 +53 -0 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.50
retrieving revision 1.51
diff -u -r1.50 -r1.51
--- modperl_util.c 11 Jan 2003 00:02:16 -0000 1.50
+++ modperl_util.c 4 Mar 2003 09:42:42 -0000 1.51
@@ -615,3 +615,56 @@
return rv;
}
+static int modperl_gvhv_is_stash(GV *gv)
+{
+ int len = GvNAMELEN(gv);
+ char *name = GvNAME(gv);
+
+ if ((len > 2) && (name[len - 1] == ':') && (name[len - 2] == ':')) {
+ return 1;
+ }
+
+ return 0;
+}
+
+/*
+ * we do not clear symbols within packages, the desired behavior
+ * for directive handler classes. and there should never be a package
+ * within the %Apache::ReadConfig. nothing else that i'm aware of calls
+ * this function, so we should be ok.
+ */
+
+void modperl_clear_symtab(pTHX_ HV *symtab)
+{
+ SV *val;
+ char *key;
+ I32 klen;
+
+ hv_iterinit(symtab);
+
+ while ((val = hv_iternextsv(symtab, &key, &klen))) {
+ SV *sv;
+ HV *hv;
+ AV *av;
+ CV *cv;
+
+ if ((SvTYPE(val) != SVt_PVGV) || GvIMPORTED((GV*)val)) {
+ continue;
+ }
+ if ((sv = GvSV((GV*)val))) {
+ sv_setsv(GvSV((GV*)val), &PL_sv_undef);
+ }
+ if ((hv = GvHV((GV*)val)) && !modperl_gvhv_is_stash((GV*)val)) {
+ hv_clear(hv);
+ }
+ if ((av = GvAV((GV*)val))) {
+ av_clear(av);
+ }
+ if ((cv = GvCV((GV*)val)) && (GvSTASH((GV*)val) == GvSTASH(CvGV(cv)))) {
+ GV *gv = CvGV(cv);
+ cv_undef(cv);
+ CvGV(cv) = gv;
+ GvCVGEN(gv) = 1; /* invalidate method cache */
+ }
+ }
+}
1.39 +2 -0 modperl-2.0/src/modules/perl/modperl_util.h
Index: modperl_util.h
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_util.h,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -r1.38 -r1.39
--- modperl_util.h 23 Jan 2003 00:31:28 -0000 1.38
+++ modperl_util.h 4 Mar 2003 09:42:42 -0000 1.39
@@ -126,4 +126,6 @@
SV *modperl_perl_gensym(pTHX_ char *pack);
+void modperl_clear_symtab(pTHX_ HV *symtab);
+
#endif /* MODPERL_UTIL_H */
1.6 +7 -0 modperl-2.0/t/conf/extra.last.conf.in
Index: extra.last.conf.in
===================================================================
RCS file: /home/cvs/modperl-2.0/t/conf/extra.last.conf.in,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- extra.last.conf.in 4 Mar 2003 03:35:05 -0000 1.5
+++ extra.last.conf.in 4 Mar 2003 09:42:42 -0000 1.6
@@ -12,6 +12,13 @@
};
</Perl>
+<Perl >
+$Apache::Server::SaveConfig = 1;
+$Location{'/perl_sections_saved'} = {
+ 'AuthName' => 'PerlSection',
+ };
+</Perl>
+
### --------------------------------- ###
Perl $TestDirective::perl::worked="yes";
1.2 +7 -1 modperl-2.0/t/response/TestDirective/perldo.pm
Index: perldo.pm
===================================================================
RCS file: /home/cvs/modperl-2.0/t/response/TestDirective/perldo.pm,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- perldo.pm 7 Oct 2002 02:35:18 -0000 1.1
+++ perldo.pm 4 Mar 2003 09:42:42 -0000 1.2
@@ -10,9 +10,15 @@
sub handler {
my $r = shift;
- plan $r, tests => 1;
+ plan $r, tests => 4;
ok t_cmp('yes', $TestDirective::perl::worked);
+
+ ok not exists $Apache::ReadConfig::Location{'/perl_sections'};
+
+ ok exists $Apache::ReadConfig::Location{'/perl_sections_saved'};
+
+ ok t_cmp('PerlSection', $Apache::ReadConfig::Location{'/perl_sections_saved'}{'AuthName'});
Apache::OK;
}
1.108 +14 -0 modperl-2.0/xs/tables/current/ModPerl/FunctionTable.pm
Index: FunctionTable.pm
===================================================================
RCS file: /home/cvs/modperl-2.0/xs/tables/current/ModPerl/FunctionTable.pm,v
retrieving revision 1.107
retrieving revision 1.108
diff -u -r1.107 -r1.108
--- FunctionTable.pm 3 Mar 2003 03:39:06 -0000 1.107
+++ FunctionTable.pm 4 Mar 2003 09:42:42 -0000 1.108
@@ -3635,6 +3635,20 @@
}
]
},
+ {
+ 'return_type' => 'void',
+ 'name' => 'modperl_clear_symtab',
+ 'args' => [
+ {
+ 'type' => 'PerlInterpreter *',
+ 'name' => 'my_perl'
+ },
+ {
+ 'type' => 'HV *',
+ 'name' => 'symtab'
+ },
+ ],
+ },
{
'return_type' => 'HE *',
'name' => 'modperl_perl_hv_fetch_he',
Re: cvs commit: modperl-2.0/xs/tables/current/ModPerl FunctionTable.pm
Posted by Stas Bekman <st...@stason.org>.
gozer@apache.org wrote:
> gozer 2003/03/04 01:42:42
>
> Modified: . Changes STATUS
> src/modules/perl modperl_cmd.c modperl_util.c modperl_util.h
> t/conf extra.last.conf.in
> t/response/TestDirective perldo.pm
> xs/tables/current/ModPerl FunctionTable.pm
> Log:
> $Apache::Server::SaveConfig added. When set to a true value,
> will not clear the content of Apache::ReadConfig:: once <Perl >
> sections are processed.
the only remaining bit is the docco ;) thanks!
__________________________________________________________________
Stas Bekman JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide ---> http://perl.apache.org
mailto:stas@stason.org http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org http://ticketmaster.com
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org