home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / d / d-linux.zip / dm-dist / signals.c < prev    next >
C/C++ Source or Header  |  1991-03-01  |  2KB  |  86 lines

  1. /* ************************************************************************
  2. *  file: signals.c , trapping of signals from Unix.       Part of DIKUMUD *
  3. *  Usage : Signal Trapping.                                               *
  4. *  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
  5. ************************************************************************* */
  6.  
  7. #include <signal.h>
  8. #include <stdio.h>
  9. #include <sys/time.h>
  10.  
  11. #include "utils.h"
  12.  
  13. int checkpointing(void);
  14. int shutdown_request(void);
  15. int logsig(void);
  16. int hupsig(void);
  17.  
  18. void signal_setup(void)
  19. {
  20.     struct itimerval itime;
  21.     struct timeval interval;
  22.  
  23.     signal(SIGUSR2, shutdown_request);
  24.  
  25.     /* just to be on the safe side: */
  26.  
  27.     signal(SIGHUP, hupsig);
  28.     signal(SIGPIPE, SIG_IGN);
  29.     signal(SIGINT, hupsig);
  30.     signal(SIGALRM, logsig);
  31.     signal(SIGTERM, hupsig);
  32.  
  33.     /* set up the deadlock-protection */
  34.  
  35.     interval.tv_sec = 900;    /* 15 minutes */
  36.     interval.tv_usec = 0;
  37.     itime.it_interval = interval;
  38.     itime.it_value = interval;
  39.     setitimer(ITIMER_VIRTUAL, &itime, 0);
  40.     signal(SIGVTALRM, checkpointing);
  41. }
  42.  
  43.  
  44.  
  45. int checkpointing(void)
  46. {
  47.     extern int tics;
  48.     
  49.     if (!tics)
  50.     {
  51.         log("CHECKPOINT shutdown: tics not updated");
  52.         abort();
  53.     }
  54.     else
  55.         tics = 0;
  56. }
  57.  
  58.  
  59.  
  60.  
  61. int shutdown_request(void)
  62. {
  63.     extern int shutdown;
  64.  
  65.     log("Received USR2 - shutdown request");
  66.     shutdown = 1;
  67. }
  68.  
  69.  
  70.  
  71. /* kick out players etc */
  72. int hupsig(void)
  73. {
  74.     extern int shutdown;
  75.  
  76.     log("Received SIGHUP, SIGINT, or SIGTERM. Shutting down");
  77.     exit(0);   /* something more elegant should perhaps be substituted */
  78. }
  79.  
  80.  
  81.  
  82. int logsig(void)
  83. {
  84.     log("Signal received. Ignoring.");
  85. }
  86.