Mailing List Archive

cvs commit: apache-1.3/src/main http_main.c
martin 98/05/09 16:48:04

Modified: src/main http_main.c
Log:
Define a "apache private" signal names list if the OS does not have one.
Note: Currently, this list is initialized at run-time.
Additionally, check valid range of siglist array in sig_coredump() routine.

Reviewed by: Jim Jagielski, Dean Gaudet

Revision Changes Path
1.350 +135 -1 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.349
retrieving revision 1.350
diff -u -u -r1.349 -r1.350
--- http_main.c 1998/05/09 18:49:33 1.349
+++ http_main.c 1998/05/09 23:48:02 1.350
@@ -2206,6 +2206,138 @@
}


+#if defined(NSIG)
+#define NumSIG NSIG
+#elif defined(_NSIG)
+#define NumSIG _NSIG
+#elif defined(__NSIG)
+#define NumSIG __NSIG
+#else
+#define NumSIG 32 /* for 1998's unixes, this is still a good assumption */
+#endif
+
+#ifdef SYS_SIGLIST /* platform has sys_siglist[] */
+#define INIT_SIGLIST() /*nothing*/
+#else /* platform has no sys_siglist[], define our own */
+#define SYS_SIGLIST ap_sys_siglist
+#define INIT_SIGLIST() siglist_init();
+
+const char *ap_sys_siglist[NumSIG];
+
+static void siglist_init(void)
+{
+ int sig;
+
+ ap_sys_siglist[0] = "Signal 0";
+#ifdef SIGHUP
+ ap_sys_siglist[SIGHUP] = "Hangup";
+#endif
+#ifdef SIGINT
+ ap_sys_siglist[SIGINT] = "Interrupt";
+#endif
+#ifdef SIGQUIT
+ ap_sys_siglist[SIGQUIT] = "Quit";
+#endif
+#ifdef SIGILL
+ ap_sys_siglist[SIGILL] = "Illegal instruction";
+#endif
+#ifdef SIGTRAP
+ ap_sys_siglist[SIGTRAP] = "Trace/BPT trap";
+#endif
+#ifdef SIGIOT
+ ap_sys_siglist[SIGIOT] = "IOT instruction";
+#endif
+#ifdef SIGABRT
+ ap_sys_siglist[SIGABRT] = "Abort";
+#endif
+#ifdef SIGEMT
+ ap_sys_siglist[SIGEMT] = "Emulator trap";
+#endif
+#ifdef SIGFPE
+ ap_sys_siglist[SIGFPE] = "Arithmetic exception";
+#endif
+#ifdef SIGKILL
+ ap_sys_siglist[SIGKILL] = "Killed";
+#endif
+#ifdef SIGBUS
+ ap_sys_siglist[SIGBUS] = "Bus error";
+#endif
+#ifdef SIGSEGV
+ ap_sys_siglist[SIGSEGV] = "Segmentation fault";
+#endif
+#ifdef SIGSYS
+ ap_sys_siglist[SIGSYS] = "Bad system call";
+#endif
+#ifdef SIGPIPE
+ ap_sys_siglist[SIGPIPE] = "Broken pipe";
+#endif
+#ifdef SIGALRM
+ ap_sys_siglist[SIGALRM] = "Alarm clock";
+#endif
+#ifdef SIGTERM
+ ap_sys_siglist[SIGTERM] = "Terminated";
+#endif
+#ifdef SIGUSR1
+ ap_sys_siglist[SIGUSR1] = "User defined signal 1";
+#endif
+#ifdef SIGUSR2
+ ap_sys_siglist[SIGUSR2] = "User defined signal 2";
+#endif
+#ifdef SIGCLD
+ ap_sys_siglist[SIGCLD] = "Child status change";
+#endif
+#ifdef SIGCHLD
+ ap_sys_siglist[SIGCHLD] = "Child status change";
+#endif
+#ifdef SIGPWR
+ ap_sys_siglist[SIGPWR] = "Power-fail restart";
+#endif
+#ifdef SIGWINCH
+ ap_sys_siglist[SIGWINCH] = "Window changed";
+#endif
+#ifdef SIGURG
+ ap_sys_siglist[SIGURG] = "urgent socket condition";
+#endif
+#ifdef SIGPOLL
+ ap_sys_siglist[SIGPOLL] = "Pollable event occurred";
+#endif
+#ifdef SIGIO
+ ap_sys_siglist[SIGIO] = "socket I/O possible";
+#endif
+#ifdef SIGSTOP
+ ap_sys_siglist[SIGSTOP] = "Stopped (signal)";
+#endif
+#ifdef SIGTSTP
+ ap_sys_siglist[SIGTSTP] = "Stopped";
+#endif
+#ifdef SIGCONT
+ ap_sys_siglist[SIGCONT] = "Continued";
+#endif
+#ifdef SIGTTIN
+ ap_sys_siglist[SIGTTIN] = "Stopped (tty input)";
+#endif
+#ifdef SIGTTOU
+ ap_sys_siglist[SIGTTOU] = "Stopped (tty output)";
+#endif
+#ifdef SIGVTALRM
+ ap_sys_siglist[SIGVTALRM] = "virtual timer expired";
+#endif
+#ifdef SIGPROF
+ ap_sys_siglist[SIGPROF] = "profiling timer expired";
+#endif
+#ifdef SIGXCPU
+ ap_sys_siglist[SIGXCPU] = "exceeded cpu limit";
+#endif
+#ifdef SIGXFSZ
+ ap_sys_siglist[SIGXFSZ] = "exceeded file size limit";
+#endif
+ for (sig=0; sig < sizeof(ap_sys_siglist)/sizeof(ap_sys_siglist[0]); ++sig)
+ if (ap_sys_siglist[sig] == NULL)
+ ap_sys_siglist[sig] = "";
+}
+#endif /* platform has sys_siglist[] */
+
+
/* handle all varieties of core dumping signals */
static void sig_coredump(int sig)
{
@@ -3086,6 +3218,7 @@
*/
static void common_init(void)
{
+ INIT_SIGLIST()
#ifdef AUX3
(void) set42sig();
#endif
@@ -3793,7 +3926,8 @@
server_conf,
"httpd: child pid %d exit signal %s (%d), "
"possible coredump in %s",
- pid, SYS_SIGLIST[WTERMSIG(status)], WTERMSIG(status),
+ pid, (WTERMSIG(status) >= NumSIG) ? "" :
+ SYS_SIGLIST[WTERMSIG(status)], WTERMSIG(status),
ap_coredump_dir);
}
else {