only deal with signals that are not ignored
authorceriel <none@none>
Wed, 29 Aug 1990 11:44:33 +0000 (11:44 +0000)
committerceriel <none@none>
Wed, 29 Aug 1990 11:44:33 +0000 (11:44 +0000)
lang/m2/libm2/sigtrp.c

index 59a6006..c016125 100644 (file)
@@ -50,6 +50,7 @@ sigtrp(trapno, signo)
        */
        extern int errno;
        int (*ctch)() = __ctchsig;
+       int (*oldctch)();
        int oldtrap;
 
        if (signo <= 0 || signo >= sizeof(__traps)/sizeof(__traps[0])) {
@@ -70,10 +71,13 @@ sigtrp(trapno, signo)
 
        oldtrap = __traps[signo];
 
-       if (signal(signo, ctch) == (int (*)())-1)  /* errno set by signal */
+       if ((oldctch = signal(signo, ctch)) == (int (*)())-1)  /* errno set by signal */
                return -1;
        
-       __traps[signo] = trapno;
+       else if (oldctch == SIG_IGN) {
+               signal(signo, SIG_IGN);
+       }
+       else __traps[signo] = trapno;
 
        return oldtrap;
 }