From 940ec287719b578e13fc52c5f33f6dfc4016d8d6 Mon Sep 17 00:00:00 2001 From: Greg Stein Date: Sun, 11 Feb 2001 00:44:40 +0000 Subject: [PATCH] toss the signal description stuff from unixd.[ch], beosd.h, and spmt_os2. use the new functionality in APR. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@88079 13f79535-47bb-0310-9956-ffa450edef68 --- os/beos/beosd.h | 18 +---- os/unix/config.m4 | 8 +- os/unix/unixd.c | 119 ----------------------------- os/unix/unixd.h | 24 ------ server/mpm/spmt_os2/spmt_os2.c | 132 --------------------------------- server/mpm_common.c | 26 +++---- 6 files changed, 14 insertions(+), 313 deletions(-) diff --git a/os/beos/beosd.h b/os/beos/beosd.h index 62d27ea089..38d6229927 100644 --- a/os/beos/beosd.h +++ b/os/beos/beosd.h @@ -56,8 +56,8 @@ * University of Illinois, Urbana-Champaign. */ -#ifndef UNIXD_H -#define UNIXD_H +#ifndef BEOSD_H +#define BEOSD_H /* common stuff that beos MPMs will want */ @@ -84,18 +84,6 @@ void beosd_pre_config(void); const char *beosd_set_user(cmd_parms *cmd, void *dummy, char *arg); const char *beosd_set_group(cmd_parms *cmd, void *dummy, char *arg); -#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 - -#define INIT_SIGLIST() /* nothing */ - #define beosd_killpg(x, y) (kill (-(x), (y))) #define UNIX_DAEMON_COMMANDS \ @@ -104,4 +92,4 @@ const char *beosd_set_group(cmd_parms *cmd, void *dummy, char *arg); { "Group", beosd_set_group, NULL, RSRC_CONF, TAKE1, \ "Effective group id for this server"}, \ -#endif +#endif /* BEOSD_H */ diff --git a/os/unix/config.m4 b/os/unix/config.m4 index 7c145433f4..73f4b38574 100644 --- a/os/unix/config.m4 +++ b/os/unix/config.m4 @@ -3,11 +3,5 @@ if test "$OS" = "unix" ; then AC_CHECK_HEADERS(sys/time.h sys/resource.h) - AC_CHECK_FUNCS( \ - setsid \ - killpg \ - ) - - dnl XXX - This doesn't deal with _sys_siglist. Maybe have to roll our own - AC_DECL_SYS_SIGLIST + AC_CHECK_FUNCS(setsid, killpg) fi diff --git a/os/unix/unixd.c b/os/unix/unixd.c index 5870ecac92..d89b04b915 100644 --- a/os/unix/unixd.c +++ b/os/unix/unixd.c @@ -241,125 +241,6 @@ void unixd_pre_config(apr_pool_t *ptemp) /* } */ } -#ifdef NEED_AP_SYS_SIGLIST - -const char *ap_sys_siglist[NumSIG]; - -#define store_str(array,index,string) \ -(ap_assert(index < (sizeof(array)/sizeof(array[0]))),array[index]=string) - -void unixd_siglist_init(void) -{ - int sig; - - ap_sys_siglist[0] = "Signal 0"; -#ifdef SIGHUP - store_str(ap_sys_siglist,SIGHUP,"Hangup"); -#endif -#ifdef SIGINT - store_str(ap_sys_siglist,SIGINT,"Interrupt"); -#endif -#ifdef SIGQUIT - store_str(ap_sys_siglist,SIGQUIT,"Quit"); -#endif -#ifdef SIGILL - store_str(ap_sys_siglist,SIGILL,"Illegal instruction"); -#endif -#ifdef SIGTRAP - store_str(ap_sys_siglist,SIGTRAP,"Trace/BPT trap"); -#endif -#ifdef SIGIOT - store_str(ap_sys_siglist,SIGIOT,"IOT instruction"); -#endif -#ifdef SIGABRT - store_str(ap_sys_siglist,SIGABRT,"Abort"); -#endif -#ifdef SIGEMT - store_str(ap_sys_siglist,SIGEMT,"Emulator trap"); -#endif -#ifdef SIGFPE - store_str(ap_sys_siglist,SIGFPE,"Arithmetic exception"); -#endif -#ifdef SIGKILL - store_str(ap_sys_siglist,SIGKILL,"Killed"); -#endif -#ifdef SIGBUS - store_str(ap_sys_siglist,SIGBUS,"Bus error"); -#endif -#ifdef SIGSEGV - store_str(ap_sys_siglist,SIGSEGV,"Segmentation fault"); -#endif -#ifdef SIGSYS - store_str(ap_sys_siglist,SIGSYS,"Bad system call"); -#endif -#ifdef SIGPIPE - store_str(ap_sys_siglist,SIGPIPE,"Broken pipe"); -#endif -#ifdef SIGALRM - store_str(ap_sys_siglist,SIGALRM,"Alarm clock"); -#endif -#ifdef SIGTERM - store_str(ap_sys_siglist,SIGTERM,"Terminated"); -#endif -#ifdef SIGUSR1 - store_str(ap_sys_siglist,SIGUSR1,"User defined signal 1"); -#endif -#ifdef SIGUSR2 - store_str(ap_sys_siglist,SIGUSR2,"User defined signal 2"); -#endif -#ifdef SIGCLD - store_str(ap_sys_siglist,SIGCLD,"Child status change"); -#endif -#ifdef SIGCHLD - store_str(ap_sys_siglist,SIGCHLD,"Child status change"); -#endif -#ifdef SIGPWR - store_str(ap_sys_siglist,SIGPWR,"Power-fail restart"); -#endif -#ifdef SIGWINCH - store_str(ap_sys_siglist,SIGWINCH,"Window changed"); -#endif -#ifdef SIGURG - store_str(ap_sys_siglist,SIGURG,"urgent socket condition"); -#endif -#ifdef SIGPOLL - store_str(ap_sys_siglist,SIGPOLL,"Pollable event occurred"); -#endif -#ifdef SIGIO - store_str(ap_sys_siglist,SIGIO,"socket I/O possible"); -#endif -#ifdef SIGSTOP - store_str(ap_sys_siglist,SIGSTOP,"Stopped (signal)"); -#endif -#ifdef SIGTSTP - store_str(ap_sys_siglist,SIGTSTP,"Stopped"); -#endif -#ifdef SIGCONT - store_str(ap_sys_siglist,SIGCONT,"Continued"); -#endif -#ifdef SIGTTIN - store_str(ap_sys_siglist,SIGTTIN,"Stopped (tty input)"); -#endif -#ifdef SIGTTOU - store_str(ap_sys_siglist,SIGTTOU,"Stopped (tty output)"); -#endif -#ifdef SIGVTALRM - store_str(ap_sys_siglist,SIGVTALRM,"virtual timer expired"); -#endif -#ifdef SIGPROF - store_str(ap_sys_siglist,SIGPROF,"profiling timer expired"); -#endif -#ifdef SIGXCPU - store_str(ap_sys_siglist,SIGXCPU,"exceeded cpu limit"); -#endif -#ifdef SIGXFSZ - store_str(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 /* NEED_AP_SYS_SIGLIST */ AP_DECLARE(void) unixd_set_rlimit(cmd_parms *cmd, struct rlimit **plimit, const char *arg, const char * arg2, int type) diff --git a/os/unix/unixd.h b/os/unix/unixd.h index 1e6224ea03..e5032fb727 100644 --- a/os/unix/unixd.h +++ b/os/unix/unixd.h @@ -112,30 +112,6 @@ AP_DECLARE(void) unixd_set_rlimit(cmd_parms *cmd, struct rlimit **plimit, const char *arg, const char * arg2, int type); #endif -/* Information on signals for the various platforms */ - -#if defined(NSIG) -#define NumSIG NSIG -#elif defined(_NSIG) -#define NumSIG _NSIG -#elif defined(__NSIG) -#define NumSIG __NSIG -#else -#define NumSIG 33 /* breaks on OS/390 with < 33; 32 is o.k. for most */ -#endif - -#ifdef SYS_SIGLIST /* platform has sys_siglist[] */ -#define INIT_SIGLIST() /* nothing */ -#elif defined(SYS_SIGLIST_DECLARED) /* from autoconf */ -#define INIT_SIGLIST() /* nothing */ -#define SYS_SIGLIST sys_siglist -#else -#define NEED_AP_SYS_SIGLIST -extern const char *ap_sys_siglist[NumSIG]; -#define SYS_SIGLIST ap_sys_siglist -void unixd_siglist_init(void); -#define INIT_SIGLIST() unixd_siglist_init(); -#endif /* platform has sys_siglist[] */ #ifdef HAVE_KILLPG #define unixd_killpg(x, y) (killpg ((x), (y))) diff --git a/server/mpm/spmt_os2/spmt_os2.c b/server/mpm/spmt_os2/spmt_os2.c index 3c5bde5836..0119e09446 100644 --- a/server/mpm/spmt_os2/spmt_os2.c +++ b/server/mpm/spmt_os2/spmt_os2.c @@ -271,137 +271,6 @@ static int wait_or_timeout(apr_wait_t *status) } -#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) @@ -1271,7 +1140,6 @@ static void spmt_os2_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t static void spmt_os2_hooks(apr_pool_t *p) { - INIT_SIGLIST(); /* TODO: set one_process properly */ one_process = 0; ap_hook_pre_config(spmt_os2_pre_config, NULL, NULL, APR_HOOK_MIDDLE); diff --git a/server/mpm_common.c b/server/mpm_common.c index dc0081533e..bdf499c49b 100644 --- a/server/mpm_common.c +++ b/server/mpm_common.c @@ -69,7 +69,7 @@ #include "apr.h" #include "apr_thread_proc.h" -#include "apr_general.h" /* for signal stuff */ +#include "apr_signal.h" #include "httpd.h" #include "http_config.h" @@ -214,6 +214,9 @@ void ap_wait_or_timeout(apr_wait_t *status, apr_proc_t *ret, apr_pool_t *p) void ap_process_child_status(apr_proc_t *pid, apr_wait_t status) { + int signum = WTERMSIG(status); + const char *sigdesc = apr_signal_get_description(signum); + /* Child died... if it died due to a fatal error, * we should simply bail out. */ @@ -225,41 +228,32 @@ void ap_process_child_status(apr_proc_t *pid, apr_wait_t status) (long)pid->pid); exit(APEXIT_CHILDFATAL); } + if (WIFSIGNALED(status)) { - switch (WTERMSIG(status)) { + switch (signum) { case SIGTERM: case SIGHUP: case SIGWINCH: case SIGKILL: break; default: -#ifdef SYS_SIGLIST #ifdef WCOREDUMP if (WCOREDUMP(status)) { ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, ap_server_conf, "child pid %ld exit signal %s (%d), " "possible coredump in %s", - (long)pid->pid, (WTERMSIG(status) >= NumSIG) ? "" : - SYS_SIGLIST[WTERMSIG(status)], WTERMSIG(status), + (long)pid->pid, sigdesc, signum, ap_coredump_dir); } - else { + else #endif + { ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, ap_server_conf, "child pid %ld exit signal %s (%d)", - (long)pid->pid, - SYS_SIGLIST[WTERMSIG(status)], WTERMSIG(status)); -#ifdef WCOREDUMP + (long)pid->pid, sigdesc, signum); } -#endif -#else - ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, - 0, ap_server_conf, - "child pid %ld exit signal %d", - (long)pid->pid, WTERMSIG(status)); -#endif } } } -- 2.49.0