# 2.11BSD#431 - /usr/src/new/rn/final.c

##### Functions

    cont_catcher      X
    final_init        X
    finalize          X
    int_catcher       X
    sig_catcher       X
    stop_catcher      X

       1: /* $Header: final.c,v 4.3 85/05/01 11:38:08 lwall Exp $
       2:  *
       3:  * $Log:	final.c,v $
       4:  * Revision 4.3  85/05/01  11:38:08  lwall
       5:  * Baseline for release with 4.3bsd.
       6:  *
       7:  */
       8:
       9: #include "EXTERN.h"
      10: #include "common.h"
      11: #include "util.h"
      12: #include "term.h"
      13: #include "ng.h"
      14: #include "init.h"
      15: #include "bits.h"
      16: #include "last.h"
      17: #include "rcstuff.h"
      18: #include "ngdata.h"
      19: #include "artio.h"
      20: #include "INTERN.h"
      21: #include "final.h"
      22:
      23: void
      24: final_init()
      25: {
      26: #ifdef SIGTSTP
      27:     sigset(SIGTSTP, stop_catcher);  /* job control signals */
      28:     sigset(SIGCONT, cont_catcher);  /* job control signals */
      29: #endif
      30:
      31:     sigset(SIGINT, int_catcher);    /* always catch interrupts */
      32:     sigset(SIGHUP, sig_catcher);    /* and hangups */
      33: #ifndef lint
      34:     sigignore(SIGEMT);
      35: #endif lint
      36:
      37:     sigset(SIGILL, sig_catcher);
      38:     sigset(SIGTRAP, sig_catcher);
      39:     sigset(SIGFPE, sig_catcher);
      40:     sigset(SIGBUS, sig_catcher);
      41:     sigset(SIGSEGV, sig_catcher);
      42:     sigset(SIGSYS, sig_catcher);
      43:     sigset(SIGTERM, sig_catcher);
      44: #ifdef SIGXCPU
      45:     sigset(SIGXCPU, sig_catcher);
      46: #endif
      47: #ifdef SIGXFSZ
      48:     sigset(SIGXFSZ, sig_catcher);
      49: #endif
      50: }
      51:
      52: void                    /* very much void */
      53: finalize(status)
      54: int status;
      55: {
      56: #ifdef SERVER
      57:     char artname[32];
      58: #endif SERVER
      59:
      60:     if (bizarre)
      61:     resetty();
      62:     UNLINK(lockname);
      63: #ifdef SERVER
      64:     if (openart > 0) {
      65:     sprintf(artname, "/tmp/rrn%ld.%ld", openart, getpid());
      66:         UNLINK(artname);
      67:     }
      68:     UNLINK(active_name);
      69:     close_server();
      70: #endif SERVER
      71:     if (status < 0) {
      72:     chdir("/usr/tmp");
      73:     sigset(SIGILL,SIG_DFL);
      74:     abort();
      75:     }
      76:     exit(status);
      77: }
      78:
      79: /* come here on interrupt */
      80:
      81: int
      82: int_catcher()
      83: {
      84:     sigset(SIGINT,int_catcher);
      85: #ifdef DEBUGGING
      86:     if (debug)
      87:     write(2,"int_catcher\n",12);
      88: #endif
      89:     if (!waiting) {
      90:     if (int_count) {        /* was there already an interrupt? */
      91:         write(2,"\nBye-bye.\n",10);
      92:         sig_catcher(0);     /* emulate the other signals */
      93:     }
      94:     int_count++;
      95:     }
      96: }
      97:
      98: /* come here on signal other than interrupt, stop, or cont */
      99:
     100: int
     101: sig_catcher(signo)
     102: {
     103: #ifdef VERBOSE
     104:     static char *signame[] = {
     105:     "",
     106:     "HUP",
     107:     "INT",
     108:     "QUIT",
     109:     "ILL",
     110:     "TRAP",
     111:     "IOT",
     112:     "EMT",
     113:     "FPE",
     114:     "KILL",
     115:     "BUS",
     116:     "SEGV",
     117:     "SYS",
     118:     "PIPE",
     119:     "ALRM",
     120:     "TERM",
     121:     "???"
     122: #ifdef SIGTSTP
     123:     ,"STOP",
     124:     "TSTP",
     125:     "CONT",
     126:     "CHLD",
     127:     "TTIN",
     128:     "TTOU",
     129:     "TINT",
     130:     "XCPU",
     131:     "XFSZ"
     132: #ifdef SIGPROF
     133:     ,"VTALARM",
     134:     "PROF"
     135: #endif
     136: #endif
     137:     };
     138: #endif
     139:
     140: #ifdef SIGTTOU
     141: #ifndef lint
     142:     sigignore(SIGTTOU);
     143: #endif lint
     144: #endif
     145: #ifdef DEBUGGING
     146:     if (debug) {
     147:     printf("\nSIG%s--.newsrc not restored in debug\n",signame[signo]);
     148:     finalize(-1);
     149:     }
     150: #endif
     151:     if (panic)
     152:     abort();
     153:     (void) sigset(SIGILL,SIG_DFL);
     154:     panic = TRUE;           /* disable terminal I/O */
     155:     if (doing_ng) {         /* need we reconstitute rc line? */
     156:     yankback();
     157:     restore_ng();           /* then do so (hope this works) */
     158:     }
     159:     doing_ng = FALSE;
     160:     if (rc_changed)         /* need we write .newsrc out? */
     161:     write_rc();         /* then do so */
     162:     rc_changed = FALSE;
     163:     if (signo != SIGHUP)
     164: #ifdef VERBOSE
     165:     IF(verbose)
     166:         printf("\nCaught %s%s--.newsrc restored\n",
     167:         signo ? "a SIG" : "an internal error", signame[signo]);
     168:     ELSE
     169: #endif
     170: #ifdef TERSE
     171:         printf("\nSignal %d--bye bye\n",signo);
     172: #endif
     173:     switch (signo) {
     174:     case SIGBUS:
     175:     case SIGILL:
     176:     case SIGSEGV:
     177:     finalize(-signo);
     178:     }
     179:     finalize(1);                /* and blow up */
     180: }
     181:
     182: #ifdef SIGTSTP
     183: /* come here on stop signal */
     184:
     185: int
     186: stop_catcher()
     187: {
     188:     if (!waiting) {
     189:     checkpoint_rc();        /* good chance of crash while stopped */
     190:     resetty();          /* this is the point of all this */
     191: #ifdef DEBUGGING
     192:     if (debug)
     193:         write(2,"stop_catcher\n",13);
     194: #endif
     195:     sigset(SIGTSTP,SIG_DFL);    /* enable stop */
     196: #ifdef BSD42
     197:     sigsetmask(sigblock(0L) & ~(1L << (SIGTSTP-1)));
     198: #endif
     199:     kill(0,SIGTSTP);        /* and do the stop */
     200:     }
     201:     sigset(SIGTSTP,stop_catcher);   /* unenable the stop */
     202: }
     203:
     204: /* come here on cont signal */
     205:
     206: int
     207: cont_catcher()
     208: {
     209:     sigset(SIGCONT,cont_catcher);
     210:     savetty();
     211: #ifdef MAILCALL;
     212:     mailcount = 0;          /* force recheck */
     213: #endif
     214:     if (!panic) {
     215:     if (!waiting) {
     216: #ifdef DEBUGGING
     217:         if (debug)
     218:         write(2,"cont_catcher\n",13);
     219: #endif
     220:         noecho();           /* set no echo */
     221:         crmode();           /* set cbreak mode */
     222:         forceme("\f");      /* cause a refresh */
     223:                     /* (defined only if TIOCSTI defined) */
     224:     }
     225:     }
     226: }
     227: #endif

#### Defined functions

cont_catcher defined in line 206; used 3 times

- in line 28, 209
- in /usr/src/new/rn/final.h line 25

final_init defined in line 23; used 2 times

- in /usr/src/new/rn/final.h line 28
- in /usr/src/new/rn/init.c line 92

finalize defined in line 52; used 30 times

- in line 148, 177-179(2)
- in /usr/src/new/rn/artio.c line 65, 77
- in /usr/src/new/rn/final.h line 29
- in /usr/src/new/rn/head.c line 241
- in /usr/src/new/rn/init.c line 107, 142, 150-154(2), 313
- in /usr/src/new/rn/ng.c line 145, 383
- in /usr/src/new/rn/ngdata.c line 48, 56, 76
- in /usr/src/new/rn/only.c line 44, 82
- in /usr/src/new/rn/rcstuff.c line 111, 186, 210, 221, 280, 920, 940
- in /usr/src/new/rn/rn.c line 511
- in /usr/src/new/rn/term.c line 132, 148
- in /usr/src/new/rn/util.c line 334

int_catcher defined in line 81; used 3 times

- in line 31, 84
- in /usr/src/new/rn/final.h line 21

sig_catcher defined in line 100; used 32 times

- in line 32-48(10), 92
- in /usr/src/new/rn/backpage.c line 30
- in /usr/src/new/rn/bits.c line 226, 293
- in /usr/src/new/rn/common.h line 343
- in /usr/src/new/rn/final.h line 22
- in /usr/src/new/rn/init.c line 319
- in /usr/src/new/rn/intrp.c line 144, 1010
- in /usr/src/new/rn/ng.c line 528
- in /usr/src/new/rn/ngstuff.c line 56, 69, 113
- in /usr/src/new/rn/respond.c line 76, 246, 430
- in /usr/src/new/rn/term.c line 614, 736
- in /usr/src/new/rn/util.c line 101, 121, 293, 322

stop_catcher defined in line 185; used 3 times

- in line 27, 201
- in /usr/src/new/rn/final.h line 24

Last modified: 1989-04-22 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 885 |