dougm 2002/09/05 11:05:52
Modified:src/modules/perl modperl_module.c
Log:
automate SvREFCNT-ing used with modperl_module_cmd_fetch a bit
Revision ChangesPath
1.7 +9 -7 modperl-2.0/src/modules/perl/modperl_module.c
Index: modperl_module.c
===
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_module.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- modperl_module.c 4 Sep 2002 17:11:22 - 1.6
+++ modperl_module.c 5 Sep 2002 18:05:52 - 1.7
@@ -499,7 +499,10 @@
{
const char *errmsg = NULL;
-*retval = Nullsv;
+if (*retval) {
+SvREFCNT_dec(*retval);
+*retval = Nullsv;
+}
if (sv_isobject(obj)) {
int count;
@@ -572,7 +575,7 @@
cmds = apr_array_make(p, fill+1, sizeof(command_rec));
for (i=0; i<=fill; i++) {
-SV *val;
+SV *val = Nullsv;
STRLEN len;
SV *obj = AvARRAY(module_cmds)[i];
modperl_module_cmd_data_t *info = modperl_module_cmd_data_new(p);
@@ -586,7 +589,6 @@
}
cmd->name = apr_pstrdup(p, SvPV(val, len));
-SvREFCNT_dec(val);
if ((errmsg = modperl_module_cmd_fetch(aTHX_ obj, "args_how", &val))) {
/* XXX default based on $self->func prototype */
@@ -600,7 +602,6 @@
cmd->args_how =
modperl_constants_lookup_apache(SvPV(val, len));
}
-SvREFCNT_dec(val);
}
if (!modperl_module_cmd_lookup(cmd)) {
@@ -614,7 +615,6 @@
}
else {
info->func_name = apr_pstrdup(p, SvPV(val, len));
-SvREFCNT_dec(val);
}
if ((errmsg = modperl_module_cmd_fetch(aTHX_ obj, "req_override", &val))) {
@@ -628,7 +628,6 @@
cmd->req_override =
modperl_constants_lookup_apache(SvPV(val, len));
}
-SvREFCNT_dec(val);
}
if ((errmsg = modperl_module_cmd_fetch(aTHX_ obj, "errmsg", &val))) {
@@ -638,7 +637,6 @@
}
else {
cmd->errmsg = apr_pstrdup(p, SvPV(val, len));
-SvREFCNT_dec(val);
}
cmd->cmd_data = info;
@@ -646,7 +644,11 @@
/* no default if undefined */
if (!(errmsg = modperl_module_cmd_fetch(aTHX_ obj, "data", &val))) {
info->cmd_data = apr_pstrdup(p, SvPV(val, len));
+}
+
+if (val) {
SvREFCNT_dec(val);
+val = Nullsv;
}
}