diff --git a/src/signal_handler.c b/src/signal_handler.c index 0d68cf9421e1164f73d5dc69ad865ea25772e54f..c7d9a9b65ae8e290e1f24960e2f230c48f43883a 100644 --- a/src/signal_handler.c +++ b/src/signal_handler.c @@ -25,7 +25,7 @@ #include "main.h" #include <signal.h> -RCSID("$Id: signal_handler.c,v 1.137 1999/06/10 07:16:13 hubbe Exp $"); +RCSID("$Id: signal_handler.c,v 1.138 1999/06/11 06:39:56 hubbe Exp $"); #ifdef HAVE_PASSWD_H # include <passwd.h> @@ -452,6 +452,87 @@ static struct sigdesc signal_desc []={ }; +/* Process stuff */ + +#if PIKE_DEBUG + +char process_info[65536]; +int last_pid_p; +int last_pids[4096]; + +#define P_NOT_STARTED 0 +#define P_RUNNING 1 +#define P_DONE 2 +#define P_RUNNING_AGAIN 3 +#define P_DONE_AGAIN 4 + +void dump_process_history(pid_t pid) +{ + int e; + if(pid < 1 || pid > 65536) + fatal("Pid out of range: %ld\n",(long)pid); + + fprintf(stderr,"Process history:"); + for(e=MAXIMUM(-4095,-last_pid_p);e<0;e++) + { + fprintf(stderr," %d",last_pids[ (last_pid_p + e) & 4095]); + } + + fprintf(stderr,"\nProblem pid = %d, status = %d\n",pid,process_info[pid]); +} + + +void process_started(pid_t pid) +{ + if(pid < 1 || pid > 65536) + fatal("Pid out of range: %ld\n",(long)pid); + + last_pids[last_pid_p++ & 4095]=pid; + + switch(process_info[pid]) + { + case P_NOT_STARTED: + case P_DONE: + process_info[pid]++; + break; + + case P_DONE_AGAIN: + process_info[pid]=P_RUNNING_AGAIN; + break; + + default: + dump_process_history(pid); + fatal("Process debug: Pid %ld started without stopping! (status=%d)\n",(long)pid,process_info[pid]); + } +} + +void process_done(pid_t pid, char *from) +{ + if(pid < 1 || pid > 65536) + fatal("Pid out of range in %s: %ld\n",from,(long)pid); + switch(process_info[pid]) + { + case P_RUNNING: + case P_RUNNING_AGAIN: + process_info[pid]++; + break; + + default: + dump_process_history(pid); + fatal("Process debug: Unknown child %ld in %s! (status=%d)\n",(long)pid,from,process_info[pid]); + } +} + + +#else + +#define process_started(PID) +#define process_done(PID,FROM) +#define dump_process_history(PID) + +#endif + + static void register_signal(int signum) { BEGIN_FIFO_PUSH(sig,char); @@ -733,90 +814,6 @@ static void f_signame(int args) } - - - -/* Process stuff */ - -#if PIKE_DEBUG - -char process_info[65536]; -int last_pid_p; -int last_pids[4096]; - -#define P_NOT_STARTED 0 -#define P_RUNNING 1 -#define P_DONE 2 -#define P_RUNNING_AGAIN 3 -#define P_DONE_AGAIN 4 - -void dump_process_history(pid_t pid) -{ - int e; - if(pid < 1 || pid > 65536) - fatal("Pid out of range: %ld\n",(long)pid); - - fprintf(stderr,"Process history:"); - for(e=MAXIMUM(-4095,-last_pid_p);e<0;e++) - { - fprintf(stderr," %d",last_pids[ (last_pid_p + e) & 4095]); - } - - fprintf(stderr,"\nProblem pid = %d, status = %d\n",pid,process_info[pid]); -} - - -void process_started(pid_t pid) -{ - if(pid < 1 || pid > 65536) - fatal("Pid out of range: %ld\n",(long)pid); - - last_pids[last_pid_p++ & 4095]=pid; - - switch(process_info[pid]) - { - case P_NOT_STARTED: - case P_DONE: - process_info[pid]++; - break; - - case P_DONE_AGAIN: - process_info[pid]=P_RUNNING_AGAIN; - break; - - default: - dump_process_history(pid); - fatal("Process debug: Pid %ld started without stopping! (status=%d)\n",(long)pid,process_info[pid]); - } -} - -void process_done(pid_t pid, char *from) -{ - if(pid < 1 || pid > 65536) - fatal("Pid out of range in %s: %ld\n",from,(long)pid); - switch(process_info[pid]) - { - case P_RUNNING: - case P_RUNNING_AGAIN: - process_info[pid]++; - break; - - default: - dump_process_history(pid); - fatal("Process debug: Unknown child %ld in %s! (status=%d)\n",(long)pid,from,process_info[pid]); - } -} - - -#else - -#define process_started(PID) -#define process_done(PID,FROM) -#define dump_process_history(PID) - -#endif - - #ifdef HAVE_WAITPID #define WAITPID(PID,STATUS,OPT) waitpid(PID,STATUS,OPT) #else