dougm 01/04/24 20:13:59
Modified: src/modules/perl modperl_mgv.c modperl_util.c modperl_util.h
Log:
be less noisy about failed requires if our last guess succeeds
Revision Changes Path
1.14 +14 -3 modperl-2.0/src/modules/perl/modperl_mgv.c
Index: modperl_mgv.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_mgv.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- modperl_mgv.c 2001/04/19 21:26:35 1.13
+++ modperl_mgv.c 2001/04/25 03:13:58 1.14
@@ -291,7 +291,7 @@
MP_TRACE_h(MP_FUNC,
"package %s not defined, attempting to load\n", name);
- if (modperl_require_module(aTHX_ name)) {
+ if (modperl_require_module(aTHX_ name, FALSE)) {
MP_TRACE_h(MP_FUNC, "loaded %s package\n", name);
if (!(stash = gv_stashpv(name, FALSE))) {
MP_TRACE_h(MP_FUNC, "%s package still does not exist\n",
@@ -300,6 +300,8 @@
}
}
else {
+ I32 errlen = 0;
+ char *errpv;
int ix = ap_rind(name, ':');
stash = Nullhv;
@@ -311,13 +313,22 @@
char *try_package = apr_pstrndup(p, name, ix-1);
handler_name = apr_pstrdup(p, name + ix + 1);
- if (modperl_require_module(aTHX_ try_package)) {
+ /* if this fails we want to log $@ from failure above */
+ errlen = SvCUR(ERRSV);
+ errpv = apr_pstrndup(p, SvPVX(ERRSV), errlen);
+
+ if (modperl_require_module(aTHX_ try_package, FALSE)) {
MP_TRACE_h(MP_FUNC, "loaded %s package\n", try_package);
stash = gv_stashpv(try_package, FALSE);
}
}
if (!stash) {
+ if (errlen) {
+ sv_setpvn(ERRSV, errpv, errlen);
+ }
+ (void)modperl_errsv(aTHX_ HTTP_INTERNAL_SERVER_ERROR,
+ NULL, NULL);
MP_TRACE_h(MP_FUNC, "failed to load %s package\n", name);
return 0;
}
@@ -385,7 +396,7 @@
char *package =
modperl_mgv_as_string(aTHX_ symbol, p, 1);
- if (modperl_require_module(aTHX_ package)) {
+ if (modperl_require_module(aTHX_ package, TRUE)) {
MP_TRACE_h(MP_FUNC, "reloaded %s for server %s\n",
package, modperl_server_desc(s, p));
return TRUE;
1.8 +5 -2 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.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- modperl_util.c 2001/04/20 01:57:25 1.7
+++ modperl_util.c 2001/04/25 03:13:59 1.8
@@ -1,6 +1,6 @@
#include "mod_perl.h"
-int modperl_require_module(pTHX_ const char *pv)
+int modperl_require_module(pTHX_ const char *pv, int logfailure)
{
SV *sv;
@@ -15,7 +15,10 @@
POPSTACK;
if (SvTRUE(ERRSV)) {
- (void)modperl_errsv(aTHX_ HTTP_INTERNAL_SERVER_ERROR, NULL, NULL);
+ if (logfailure) {
+ (void)modperl_errsv(aTHX_ HTTP_INTERNAL_SERVER_ERROR,
+ NULL, NULL);
+ }
return FALSE;
}
1.9 +1 -1 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.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- modperl_util.h 2001/04/20 01:57:25 1.8
+++ modperl_util.h 2001/04/25 03:13:59 1.9
@@ -27,7 +27,7 @@
int modperl_errsv(pTHX_ int status, request_rec *r, server_rec *s);
-int modperl_require_module(pTHX_ const char *pv);
+int modperl_require_module(pTHX_ const char *pv, int logfailure);
char *modperl_server_desc(server_rec *s, apr_pool_t *p);