stas 2004/02/09 10:18:16
Modified: lib/ModPerl Code.pm
src/modules/perl modperl_cmd.c modperl_cmd.h
t/filter/TestFilter in_bbs_inject_header.pm in_bbs_msg.pm
in_str_msg.pm
todo release
. Changes
Log:
Perl(Input|Output)FilterHandler handlers are now always AutoLoaded, as
if '+' prefix was used. This must be performed to get the access to
filter attributes long before the filter itself is executed.
+ tests
Revision Changes Path
1.115 +11 -1 modperl-2.0/lib/ModPerl/Code.pm
Index: Code.pm
===================================================================
RCS file: /home/cvs/modperl-2.0/lib/ModPerl/Code.pm,v
retrieving revision 1.114
retrieving revision 1.115
diff -u -u -r1.114 -r1.115
--- Code.pm 28 Oct 2003 20:23:45 -0000 1.114
+++ Code.pm 9 Feb 2004 18:18:15 -0000 1.115
@@ -66,6 +66,15 @@
},
);
+my %cmd_push = (
+ InputFilter => 'modperl_cmd_push_filter_handlers',
+ OutputFilter => 'modperl_cmd_push_filter_handlers',
+);
+my $cmd_push_default = 'modperl_cmd_push_handlers';
+sub cmd_push {
+ $cmd_push{+shift} || $cmd_push_default;
+}
+
$hook_proto{PerDir} = $hook_proto{PerSrv};
my $scfg_get = 'MP_dSCFG(parms->server)';
@@ -320,6 +329,7 @@
my $flag = 'MpSrv' . canon_uc($h);
my $ix = $self->{handler_index}->{$class}->[$i++];
my $av = "$prototype->{handlers} [$ix]";
+ my $cmd_push = cmd_push($h);
print $h_fh "$protostr;\n";
@@ -347,7 +357,7 @@
parms->server->server_hostname, NULL);
}
MP_TRACE_d(MP_FUNC, "push [EMAIL PROTECTED], %s\\n", parms->cmd->name, arg);
- return modperl_cmd_push_handlers(&($av), arg, parms->pool);
+ return $cmd_push(&($av), arg, parms->pool);
}
EOF
}
1.54 +35 -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.53
retrieving revision 1.54
diff -u -u -r1.53 -r1.54
--- modperl_cmd.c 22 Jan 2004 21:55:49 -0000 1.53
+++ modperl_cmd.c 9 Feb 2004 18:18:16 -0000 1.54
@@ -66,6 +66,41 @@
return NULL;
}
+char *modperl_cmd_push_filter_handlers(MpAV **handlers,
+ const char *name,
+ apr_pool_t *p)
+{
+ modperl_handler_t *h = modperl_handler_new(p, name);
+
+ /* filter modules need to be autoloaded, because their attributes
+ * need to be known long before the callback is issued
+ */
+ if (*name == '-') {
+ MP_TRACE_h(MP_FUNC,
+ "[%s] warning: filter handler %s will be not autoloaded. "
+ "Unless the module defining this handler is explicitly "
+ "preloaded, filter attributes will be ignored.\n",
+ modperl_pid_tid(p), h->name);
+ }
+ else {
+ MpHandlerAUTOLOAD_On(h);
+ MP_TRACE_h(MP_FUNC,
+ "[%s] filter handler %s will be autoloaded (to make "
+ "the filter attributes available)\n",
+ modperl_pid_tid(p), h->name);
+ }
+
+ if (!*handlers) {
+ *handlers = modperl_handler_array_new(p);
+ MP_TRACE_d(MP_FUNC, "created handler stack\n");
+ }
+
+ modperl_handler_array_push(*handlers, h);
+ MP_TRACE_d(MP_FUNC, "pushed httpd filter handler: %s\n", h->name);
+
+ return NULL;
+}
+
char *modperl_cmd_push_httpd_filter_handlers(MpAV **handlers,
const char *name,
apr_pool_t *p)
1.22 +4 -0 modperl-2.0/src/modules/perl/modperl_cmd.h
Index: modperl_cmd.h
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_cmd.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -u -r1.21 -r1.22
--- modperl_cmd.h 3 Apr 2003 06:23:53 -0000 1.21
+++ modperl_cmd.h 9 Feb 2004 18:18:16 -0000 1.22
@@ -4,6 +4,10 @@
char *modperl_cmd_push_handlers(MpAV **handlers, const char *name,
apr_pool_t *p);
+char *modperl_cmd_push_filter_handlers(MpAV **handlers,
+ const char *name,
+ apr_pool_t *p);
+
char *modperl_cmd_push_httpd_filter_handlers(MpAV **handlers,
const char *name,
apr_pool_t *p);
1.3 +0 -2 modperl-2.0/t/filter/TestFilter/in_bbs_inject_header.pm
Index: in_bbs_inject_header.pm
===================================================================
RCS file: /home/cvs/modperl-2.0/t/filter/TestFilter/in_bbs_inject_header.pm,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -u -r1.2 -r1.3
--- in_bbs_inject_header.pm 7 Oct 2003 01:04:13 -0000 1.2
+++ in_bbs_inject_header.pm 9 Feb 2004 18:18:16 -0000 1.3
@@ -208,8 +208,6 @@
__END__
<NoAutoConfig>
<VirtualHost TestFilter::in_bbs_inject_header>
- # must be preloaded so the FilterConnectionHandler attributes will
- # be set by the time the filter is inserted into the filter chain
PerlModule TestFilter::in_bbs_inject_header
PerlInputFilterHandler TestFilter::in_bbs_inject_header
<Location /TestFilter__in_bbs_inject_header>
1.6 +0 -2 modperl-2.0/t/filter/TestFilter/in_bbs_msg.pm
Index: in_bbs_msg.pm
===================================================================
RCS file: /home/cvs/modperl-2.0/t/filter/TestFilter/in_bbs_msg.pm,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -u -r1.5 -r1.6
--- in_bbs_msg.pm 8 Jan 2004 23:36:56 -0000 1.5
+++ in_bbs_msg.pm 9 Feb 2004 18:18:16 -0000 1.6
@@ -80,8 +80,6 @@
__END__
<NoAutoConfig>
<VirtualHost TestFilter::in_bbs_msg>
- # must be preloaded so the FilterConnectionHandler attributes will
- # be set by the time the filter is inserted into the filter chain
PerlModule TestFilter::in_bbs_msg
PerlInputFilterHandler TestFilter::in_bbs_msg
1.5 +0 -2 modperl-2.0/t/filter/TestFilter/in_str_msg.pm
Index: in_str_msg.pm
===================================================================
RCS file: /home/cvs/modperl-2.0/t/filter/TestFilter/in_str_msg.pm,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -u -r1.4 -r1.5
--- in_str_msg.pm 18 Apr 2003 06:18:57 -0000 1.4
+++ in_str_msg.pm 9 Feb 2004 18:18:16 -0000 1.5
@@ -48,8 +48,6 @@
1;
__END__
<VirtualHost TestFilter::in_str_msg>
- # must be preloaded so the FilterConnectionHandler attributes will
- # be set by the time the filter is inserted into the filter chain
PerlModule TestFilter::in_str_msg
PerlInputFilterHandler TestFilter::in_str_msg
1.9 +0 -21 modperl-2.0/todo/release
Index: release
===================================================================
RCS file: /home/cvs/modperl-2.0/todo/release,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -u -r1.8 -r1.9
--- release 14 Jan 2004 21:27:41 -0000 1.8
+++ release 9 Feb 2004 18:18:16 -0000 1.9
@@ -42,27 +42,6 @@
Apache->server->process->pconf->cleanup_register(sub { ... });
Report: geoff
-
-* Looks like there is an issue with filter configuration, I've noticed that:
-
- PerlInputFilterHandler MyApache::InputFilterGET2HEAD
-
- silently ignores the filter, whereas:
- ^^^^^^^^^^^^^^^^
- PerlInputFilterHandler +MyApache::InputFilterGET2HEAD
-
- calls the filter. figure out:
-
- - why the loading doesn't happen
- - why the error doesn't happen (probably both connected)
-
-* Currently modperl_filter_add_{connection|request} check the filter
- handler function attrs before accepting the filter. If the module
- wasn't preloaded the check fails and filter handler is skipped. We
- could have this issue documented (which is OK, but might raise too
- many questions), but we could also always preload the filter
- handlers. To test see TestFilter::input_msg
-
* child processes never run END blocks. a good example is
Apache::TestUtil, which doesn't cleanup files and dirs it has
created, because the END block is not run.
1.318 +4 -0 modperl-2.0/Changes
Index: Changes
===================================================================
RCS file: /home/cvs/modperl-2.0/Changes,v
retrieving revision 1.317
retrieving revision 1.318
diff -u -u -r1.317 -r1.318
--- Changes 31 Jan 2004 10:06:59 -0000 1.317
+++ Changes 9 Feb 2004 18:18:16 -0000 1.318
@@ -12,6 +12,10 @@
=item 1.99_13-dev
+Perl(Input|Output)FilterHandler handlers are now always AutoLoaded, as
+if '+' prefix was used. This must be performed to get the access to
+filter attributes long before the filter itself is executed. [Stas]
+
APR.xs has been reimplemented. The problem with the previous
implementation is that a dead perl pool object could hijack a newly
created pool, which didn't belong to that object, but which happened