dougm 00/09/29 09:33:41
Modified: . Changes
src/modules/perl mod_perl.c perl_util.c
Log:
fix Apache::exit() so it does it does not trigger a warning
Revision Changes Path
1.540 +1 -1 modperl/Changes
Index: Changes
===================================================================
RCS file: /home/cvs/modperl/Changes,v
retrieving revision 1.539
retrieving revision 1.540
diff -u -r1.539 -r1.540
--- Changes 2000/09/28 21:16:07 1.539
+++ Changes 2000/09/29 16:33:38 1.540
@@ -13,7 +13,7 @@
Apache::test enhancements
[Ken Williams <[EMAIL PROTECTED]>]
-fix Apache::exit() so it does it does not trigger a warning (maybe)
+fix Apache::exit() so it does it does not trigger a warning
change Apache::PerlRun's Apache class relationship from is-a to has-a
[Ken Williams <[EMAIL PROTECTED]>]
1.130 +10 -7 modperl/src/modules/perl/mod_perl.c
Index: mod_perl.c
===================================================================
RCS file: /home/cvs/modperl/src/modules/perl/mod_perl.c,v
retrieving revision 1.129
retrieving revision 1.130
diff -u -r1.129 -r1.130
--- mod_perl.c 2000/09/27 16:13:28 1.129
+++ mod_perl.c 2000/09/29 16:33:40 1.130
@@ -1654,14 +1654,17 @@
SPAGAIN;
- if(perl_eval_ok(r->server) != OK) {
- dTHRCTX;
- MP_STORE_ERROR(r->uri, ERRSV);
- if (r->notes) {
- ap_table_set(r->notes, "error-notes", SvPVX(ERRSV));
+ if ((status = perl_eval_ok(r->server)) != OK) {
+ dTHRCTX;
+ if (status == SERVER_ERROR) {
+ MP_STORE_ERROR(r->uri, ERRSV);
+ if (r->notes) {
+ ap_table_set(r->notes, "error-notes", SvPVX(ERRSV));
+ }
}
- if(!perl_sv_is_http_code(ERRSV, &status))
- status = SERVER_ERROR;
+ else if (status == DECLINED) {
+ status = r->status == 200 ? OK : r->status;
+ }
}
else if(count != 1) {
mod_perl_error(r->server,
1.43 +15 -5 modperl/src/modules/perl/perl_util.c
Index: perl_util.c
===================================================================
RCS file: /home/cvs/modperl/src/modules/perl/perl_util.c,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -r1.42 -r1.43
--- perl_util.c 2000/09/28 21:00:47 1.42
+++ perl_util.c 2000/09/29 16:33:40 1.43
@@ -677,17 +677,27 @@
int perl_eval_ok(server_rec *s)
{
+ int status;
SV *sv;
dTHR;
dTHRCTX;
sv = ERRSV;
- if(SvTRUE(sv)) {
- MP_TRACE_g(fprintf(stderr, "perl_eval error: %s\n", SvPV(sv,na)));
- mod_perl_error(s, SvPV(sv, na));
- return -1;
+ if (SvTRUE(sv)) {
+ if (SvMAGICAL(sv) && (SvCUR(sv) > 4) &&
+ strnEQ(SvPVX(sv), " at ", 4))
+ {
+ /* Apache::exit was called */
+ return DECLINED;
+ }
+ if (perl_sv_is_http_code(ERRSV, &status)) {
+ return status;
+ }
+ MP_TRACE_g(fprintf(stderr, "perl_eval error: %s\n", SvPV(sv,na)));
+ mod_perl_error(s, SvPV(sv, na));
+ return SERVER_ERROR;
}
- return 0;
+ return OK;
}
int perl_sv_is_http_code(SV *errsv, int *status)