gozer 2004/09/09 15:39:11
Modified: . Changes
lib/Apache PerlSections.pm
src/modules/perl modperl_config.c modperl_config.h
xs/Apache/CmdParms Apache__CmdParms.h
xs/maps modperl_functions.map
xs/tables/current/ModPerl FunctionTable.pm
Log:
Added Apache::CmdParms::add_config() to work around a memory
leak discovered with <Perl> sections in .htaccess files
Revision Changes Path
1.481 +3 -0 modperl-2.0/Changes
Index: Changes
===================================================================
RCS file: /home/cvs/modperl-2.0/Changes,v
retrieving revision 1.480
retrieving revision 1.481
diff -u -r1.480 -r1.481
--- Changes 9 Sep 2004 22:16:37 -0000 1.480
+++ Changes 9 Sep 2004 22:39:10 -0000 1.481
@@ -12,6 +12,9 @@
=item 1.99_17-dev
+Added Apache::CmdParms::add_config() to work around a memory
+leak discovered with <Perl> sections in .htaccess files [Gozer]
+
Added ModPerl::Util::unload_package() to remove a loaded package
as thoroughly as possible by clearing it's stash. [Gozer]
1.8 +2 -2 modperl-2.0/lib/Apache/PerlSections.pm
Index: PerlSections.pm
===================================================================
RCS file: /home/cvs/modperl-2.0/lib/Apache/PerlSections.pm,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- PerlSections.pm 23 Aug 2004 21:16:27 -0000 1.7
+++ PerlSections.pm 9 Sep 2004 22:39:10 -0000 1.8
@@ -34,7 +34,7 @@
return bless { @args }, ref($package) || $package;
}
-sub server { return shift->{'parms'}->server() }
+sub parms { return shift->{'parms'} }
sub directives { return shift->{'directives'} ||= [] }
sub package { return shift->{'args'}->{'package'} }
@@ -200,7 +200,7 @@
sub post_config {
my($self) = @_;
- my $errmsg = $self->server->add_config($self->directives);
+ my $errmsg = $self->parms->add_config($self->directives);
die $errmsg if $errmsg;
}
1.81 +14 -0 modperl-2.0/src/modules/perl/modperl_config.c
Index: modperl_config.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_config.c,v
retrieving revision 1.80
retrieving revision 1.81
diff -u -r1.80 -r1.81
--- modperl_config.c 6 Jul 2004 22:06:04 -0000 1.80
+++ modperl_config.c 9 Sep 2004 22:39:11 -0000 1.81
@@ -561,6 +561,20 @@
return errmsg;
}
+const char *modperl_config_insert_parms(pTHX_ cmd_parms *parms,
+ SV *lines)
+{
+ return modperl_config_insert(aTHX_
+ parms->server,
+ parms->pool,
+ parms->temp_pool,
+ parms->override,
+ parms->path,
+ parms->context,
+ lines);
+}
+
+
const char *modperl_config_insert_server(pTHX_ server_rec *s, SV *lines)
{
int override = (RSRC_CONF | OR_ALL) & ~(OR_AUTHCFG | OR_LIMIT);
1.35 +3 -0 modperl-2.0/src/modules/perl/modperl_config.h
Index: modperl_config.h
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_config.h,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- modperl_config.h 6 Jul 2004 22:06:04 -0000 1.34
+++ modperl_config.h 9 Sep 2004 22:39:11 -0000 1.35
@@ -130,6 +130,9 @@
ap_conf_vector_t *conf,
SV *lines);
+const char *modperl_config_insert_parms(pTHX_ cmd_parms *parms,
+ SV *lines);
+
const char *modperl_config_insert_server(pTHX_ server_rec *s, SV *lines);
const char *modperl_config_insert_request(pTHX_
1.4 +9 -0 modperl-2.0/xs/Apache/CmdParms/Apache__CmdParms.h
Index: Apache__CmdParms.h
===================================================================
RCS file: /home/cvs/modperl-2.0/xs/Apache/CmdParms/Apache__CmdParms.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Apache__CmdParms.h 14 Apr 2004 03:41:39 -0000 1.3
+++ Apache__CmdParms.h 9 Sep 2004 22:39:11 -0000 1.4
@@ -26,3 +26,12 @@
return &PL_sv_undef;
}
+
+static MP_INLINE
+void mpxs_Apache__CmdParms_add_config(pTHX_ cmd_parms *parms, SV *lines)
+{
+ const char *errmsg = modperl_config_insert_parms(aTHX_ parms, lines);
+ if (errmsg) {
+ Perl_croak(aTHX_ "$parms->add_config() has failed: %s", errmsg);
+ }
+}
1.87 +1 -0 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.86
retrieving revision 1.87
diff -u -r1.86 -r1.87
--- modperl_functions.map 9 Sep 2004 22:16:38 -0000 1.86
+++ modperl_functions.map 9 Sep 2004 22:39:11 -0000 1.87
@@ -146,6 +146,7 @@
ap_check_cmd_context
ap_method_is_limited
mpxs_Apache__CmdParms_info
+ mpxs_Apache__CmdParms_add_config
MODULE=Apache::MPM PACKAGE=Apache::MPM BOOT=1
mpxs_Apache__MPM_query
1.179 +36 -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.178
retrieving revision 1.179
diff -u -r1.178 -r1.179
--- FunctionTable.pm 9 Sep 2004 22:16:38 -0000 1.178
+++ FunctionTable.pm 9 Sep 2004 22:39:11 -0000 1.179
@@ -1356,6 +1356,24 @@
},
{
'return_type' => 'const char *',
+ 'name' => 'modperl_config_insert_parms',
+ 'args' => [
+ {
+ 'type' => 'PerlInterpreter *',
+ 'name' => 'my_perl'
+ },
+ {
+ 'type' => 'cmd_parms *',
+ 'name' => 'parms'
+ },
+ {
+ 'type' => 'SV *',
+ 'name' => 'lines'
+ }
+ ]
+ },
+ {
+ 'return_type' => 'const char *',
'name' => 'modperl_config_insert_request',
'args' => [
{
@@ -5758,6 +5776,24 @@
{
'type' => 'apr_uri_t *',
'name' => 'apr_uri'
+ }
+ ]
+ },
+ {
+ 'return_type' => 'void',
+ 'name' => 'mpxs_Apache__CmdParms_add_config',
+ 'args' => [
+ {
+ 'type' => 'PerlInterpreter *',
+ 'name' => 'my_perl'
+ },
+ {
+ 'type' => 'cmd_parms *',
+ 'name' => 'parms'
+ },
+ {
+ 'type' => 'SV *',
+ 'name' => 'lines'
}
]
},