dgaudet 98/02/20 17:38:35
Modified: src CHANGES
src/main http_main.c
Log:
Use SA_RESETHAND or SA_ONESHOT when installing the coredump handlers.
In particular the handlers could trigger themselves into an infinite
loop if RLimitMem was used with a small amount of memory -- too small
for the signal stack frame to be set up.
Revision Changes Path
1.646 +6 -1 apache-1.3/src/CHANGES
Index: CHANGES
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v
retrieving revision 1.645
retrieving revision 1.646
diff -u -r1.645 -r1.646
--- CHANGES 1998/02/21 01:18:25 1.645
+++ CHANGES 1998/02/21 01:38:29 1.646
@@ -1,5 +1,10 @@
Changes with Apache 1.3b6
+ *) Use SA_RESETHAND or SA_ONESHOT when installing the coredump handlers.
+ In particular the handlers could trigger themselves into an infinite
+ loop if RLimitMem was used with a small amount of memory -- too small
+ for the signal stack frame to be set up. [Dean Gaudet]
+
*) Fix problems with absoluteURIs. [Dean Gaudet,
Alvaro Martinez Echevarria <[EMAIL PROTECTED]>]
@@ -18,7 +23,7 @@
processor. httpd children now unbind themselves from that cpu
and re-bind to one selected at random via bindprocessor()
[Doug MacEachern]
-
+
*) Linux 2.0 and above implement RLIMIT_AS, RLIMIT_DATA has almost no
effect. Work around it by using RLIMIT_AS for the RLimitMEM
directive. [Enrik Berkhan <[EMAIL PROTECTED]>] PR#1816
1.293 +6 -0 apache-1.3/src/main/http_main.c
Index: http_main.c
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/main/http_main.c,v
retrieving revision 1.292
retrieving revision 1.293
diff -u -r1.292 -r1.293
--- http_main.c 1998/02/18 22:41:53 1.292
+++ http_main.c 1998/02/21 01:38:32 1.293
@@ -2228,6 +2228,11 @@
if (!one_process) {
sa.sa_handler = sig_coredump;
+#if defined(SA_ONESHOT)
+ sa.sa_flags = SA_ONESHOT;
+#elif defined(SA_RESETHAND)
+ sa.sa_flags = SA_RESETHAND;
+#endif
if (sigaction(SIGSEGV, &sa, NULL) < 0)
aplog_error(APLOG_MARK, APLOG_WARNING, server_conf,
"sigaction(SIGSEGV)");
#ifdef SIGBUS
@@ -2242,6 +2247,7 @@
if (sigaction(SIGABRT, &sa, NULL) < 0)
aplog_error(APLOG_MARK, APLOG_WARNING, server_conf,
"sigaction(SIGABRT)");
#endif
+ sa.sa_flags = 0;
}
sa.sa_handler = sig_term;
if (sigaction(SIGTERM, &sa, NULL) < 0)