dougm 01/03/13 16:37:53
Modified: src/modules/perl modperl_callback.c modperl_callback.h
modperl_filter.c
Log:
pass an AV** rather than AV* to modperl_handler_make_args(), which will create the
newAV() if needed
Revision Changes Path
1.24 +11 -8 modperl-2.0/src/modules/perl/modperl_callback.c
Index: modperl_callback.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_callback.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- modperl_callback.c 2001/03/14 00:20:52 1.23
+++ modperl_callback.c 2001/03/14 00:37:52 1.24
@@ -18,11 +18,15 @@
return modperl_handler_new(p, h->name);
}
-void modperl_handler_make_args(pTHX_ AV *av, ...)
+void modperl_handler_make_args(pTHX_ AV **avp, ...)
{
va_list args;
- va_start(args, av);
+ if (!*avp) {
+ *avp = newAV(); /* XXX: cache an intialized AV* per-request */
+ }
+
+ va_start(args, avp);
for (;;) {
char *classname = va_arg(args, char *);
@@ -51,7 +55,7 @@
break;
}
- av_push(av, sv);
+ av_push(*avp, sv);
}
va_end(args);
@@ -213,16 +217,15 @@
MP_TRACE_h(MP_FUNC, "running %d %s handlers\n",
av->nelts, desc);
handlers = (modperl_handler_t **)av->elts;
- av_args = newAV();
switch (type) {
case MP_HANDLER_TYPE_DIR:
case MP_HANDLER_TYPE_SRV:
- modperl_handler_make_args(aTHX_ av_args,
+ modperl_handler_make_args(aTHX_ &av_args,
"Apache::RequestRec", r, NULL);
break;
case MP_HANDLER_TYPE_CONN:
- modperl_handler_make_args(aTHX_ av_args,
+ modperl_handler_make_args(aTHX_ &av_args,
"Apache::Connection", c, NULL);
break;
case MP_HANDLER_TYPE_FILE:
@@ -235,7 +238,7 @@
ptemp = va_arg(args, apr_pool_t *);
va_end(args);
- modperl_handler_make_args(aTHX_ av_args,
+ modperl_handler_make_args(aTHX_ &av_args,
"Apache::Pool", pconf,
"Apache::Pool", plog,
"Apache::Pool", ptemp,
@@ -254,7 +257,7 @@
p = pconf;
}
- modperl_handler_make_args(aTHX_ av_args,
+ modperl_handler_make_args(aTHX_ &av_args,
"Apache::Pool", pconf,
"Apache::Server", s, NULL);
}
1.12 +1 -1 modperl-2.0/src/modules/perl/modperl_callback.h
Index: modperl_callback.h
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_callback.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- modperl_callback.h 2001/03/09 23:46:35 1.11
+++ modperl_callback.h 2001/03/14 00:37:52 1.12
@@ -21,7 +21,7 @@
modperl_handler_t *modperl_handler_dup(apr_pool_t *p,
modperl_handler_t *h);
-void modperl_handler_make_args(pTHX_ AV *avp, ...);
+void modperl_handler_make_args(pTHX_ AV **avp, ...);
int modperl_callback(pTHX_ modperl_handler_t *handler, apr_pool_t *p,
AV *args);
1.8 +2 -4 modperl-2.0/src/modules/perl/modperl_filter.c
Index: modperl_filter.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_filter.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- modperl_filter.c 2001/03/14 00:03:29 1.7
+++ modperl_filter.c 2001/03/14 00:37:52 1.8
@@ -81,7 +81,7 @@
int modperl_run_filter(modperl_filter_t *filter)
{
- AV *args;
+ AV *args = Nullav;
int status;
modperl_handler_t *handler =
((modperl_filter_ctx_t *)filter->f->ctx)->handler;
@@ -93,9 +93,7 @@
MP_dINTERP_SELECT(r, c, s);
- args = newAV();
-
- modperl_handler_make_args(aTHX_ args,
+ modperl_handler_make_args(aTHX_ &args,
filter_classes[filter->mode], filter,
NULL);