Mercurial > hg > xemacs-beta
comparison src/signal.c @ 280:7df0dd720c89 r21-0b38
Import from CVS: tag r21-0b38
author | cvs |
---|---|
date | Mon, 13 Aug 2007 10:32:22 +0200 |
parents | 90d73dddcdc4 |
children | 8626e4521993 |
comparison
equal
deleted
inserted
replaced
279:c20b2fb5bb0a | 280:7df0dd720c89 |
---|---|
629 | 629 |
630 /************************************************************************/ | 630 /************************************************************************/ |
631 /* initialization */ | 631 /* initialization */ |
632 /************************************************************************/ | 632 /************************************************************************/ |
633 | 633 |
634 /* If we've been nohup'ed, keep it that way. | |
635 This allows `nohup xemacs &' to work. | |
636 More generally, if a normally fatal signal has been redirected | |
637 to SIG_IGN by our invocation environment, trust the environment. | |
638 This keeps xemacs from being killed by a SIGQUIT intended for a | |
639 different process after having been backgrounded under a | |
640 non-job-control shell! */ | |
641 static void | |
642 handle_signal_if_fatal (int signo) | |
643 { | |
644 if (signal (signo, fatal_error_signal) == SIG_IGN) | |
645 signal (signo, SIG_IGN); | |
646 } | |
647 | |
634 void | 648 void |
635 init_signals_very_early (void) | 649 init_signals_very_early (void) |
636 { | 650 { |
637 /* Catch all signals that would kill us. */ | 651 /* Catch all signals that would kill us. |
638 if (! noninteractive || initialized) | 652 Don't catch these signals in batch mode if not initialized. |
639 { | 653 On some machines, this sets static data that would make |
640 /* Don't catch these signals in batch mode if not initialized. | 654 signal fail to work right when the dumped Emacs is run. */ |
641 On some machines, this sets static data that would make | 655 if (noninteractive && !initialized) |
642 signal fail to work right when the dumped Emacs is run. */ | 656 return; |
657 | |
658 handle_signal_if_fatal (SIGILL); /* ANSI */ | |
659 handle_signal_if_fatal (SIGABRT); /* ANSI */ | |
660 handle_signal_if_fatal (SIGFPE); /* ANSI */ | |
661 handle_signal_if_fatal (SIGSEGV); /* ANSI */ | |
662 handle_signal_if_fatal (SIGTERM); /* ANSI */ | |
663 | |
664 | |
643 #ifdef SIGHUP | 665 #ifdef SIGHUP |
644 /* If we've been nohup'ed, keep it that way. */ | 666 handle_signal_if_fatal (SIGHUP); /* POSIX */ |
645 if (signal (SIGHUP, fatal_error_signal) == SIG_IGN) | |
646 signal (SIGHUP, SIG_IGN); | |
647 #endif | 667 #endif |
648 #ifdef SIGQUIT | 668 #ifdef SIGQUIT |
649 signal (SIGQUIT, fatal_error_signal); | 669 handle_signal_if_fatal (SIGQUIT); /* POSIX */ |
650 #endif | |
651 #ifdef SIGILL | |
652 signal (SIGILL, fatal_error_signal); | |
653 #endif | 670 #endif |
654 #ifdef SIGTRAP | 671 #ifdef SIGTRAP |
655 signal (SIGTRAP, fatal_error_signal); | 672 handle_signal_if_fatal (SIGTRAP); /* POSIX */ |
656 #endif | 673 #endif |
657 #ifdef SIGABRT | 674 #ifdef SIGUSR1 |
658 signal (SIGABRT, fatal_error_signal); | 675 handle_signal_if_fatal (SIGUSR1); /* POSIX */ |
659 #endif | 676 #endif |
677 #ifdef SIGUSR2 | |
678 handle_signal_if_fatal (SIGUSR2); /* POSIX */ | |
679 #endif | |
680 #ifdef SIGPIPE | |
681 handle_signal_if_fatal (SIGPIPE); /* POSIX */ | |
682 #endif | |
683 #ifdef SIGALRM | |
684 /* This will get reset later, once we're | |
685 capable of handling it properly. */ | |
686 handle_signal_if_fatal (SIGALRM); /* POSIX */ | |
687 #endif | |
688 | |
689 | |
690 #ifdef SIGBUS | |
691 handle_signal_if_fatal (SIGBUS); /* XPG5 */ | |
692 #endif | |
693 #ifdef SIGSYS | |
694 handle_signal_if_fatal (SIGSYS); /* XPG5 */ | |
695 #endif | |
696 #ifdef SIGXCPU | |
697 handle_signal_if_fatal (SIGXCPU); /* XPG5 */ | |
698 #endif | |
699 #ifdef SIGXFSZ | |
700 handle_signal_if_fatal (SIGXFSZ); /* XPG5 */ | |
701 #endif | |
702 #ifdef SIGVTALRM | |
703 handle_signal_if_fatal (SIGVTALRM); /* XPG5 */ | |
704 #endif | |
705 #ifdef SIGPROF | |
706 /* Messes up the REAL profiler */ | |
707 /* handle_signal_if_fatal (SIGPROF); */ /* XPG5 */ | |
708 #endif | |
709 | |
710 | |
660 #ifdef SIGHWE | 711 #ifdef SIGHWE |
661 signal (SIGHWE, fatal_error_signal); | 712 handle_signal_if_fatal (SIGHWE); |
662 #endif | 713 #endif |
663 #ifdef SIGPRE | 714 #ifdef SIGPRE |
664 signal (SIGPRE, fatal_error_signal); | 715 handle_signal_if_fatal (SIGPRE); |
665 #endif | 716 #endif |
666 #ifdef SIGORE | 717 #ifdef SIGORE |
667 signal (SIGORE, fatal_error_signal); | 718 handle_signal_if_fatal (SIGORE); |
668 #endif | 719 #endif |
669 #ifdef SIGUME | 720 #ifdef SIGUME |
670 signal (SIGUME, fatal_error_signal); | 721 handle_signal_if_fatal (SIGUME); |
671 #endif | 722 #endif |
672 #ifdef SIGDLK | 723 #ifdef SIGDLK |
673 signal (SIGDLK, fatal_error_signal); | 724 handle_signal_if_fatal (SIGDLK); |
674 #endif | 725 #endif |
675 #ifdef SIGCPULIM | 726 #ifdef SIGCPULIM |
676 signal (SIGCPULIM, fatal_error_signal); | 727 handle_signal_if_fatal (SIGCPULIM); |
677 #endif | 728 #endif |
678 #ifdef SIGIOT | 729 #ifdef SIGIOT |
679 signal (SIGIOT, fatal_error_signal); | 730 handle_signal_if_fatal (SIGIOT); |
680 #endif | 731 #endif |
681 #ifdef SIGEMT | 732 #ifdef SIGEMT |
682 signal (SIGEMT, fatal_error_signal); | 733 handle_signal_if_fatal (SIGEMT); |
683 #endif | 734 #endif |
684 signal (SIGFPE, fatal_error_signal); | |
685 #ifdef SIGBUS | |
686 signal (SIGBUS, fatal_error_signal); | |
687 #endif | |
688 signal (SIGSEGV, fatal_error_signal); | |
689 #ifdef SIGSYS | |
690 signal (SIGSYS, fatal_error_signal); | |
691 #endif | |
692 #ifdef SIGPIPE | |
693 signal (SIGPIPE, fatal_error_signal); | |
694 #endif | |
695 signal (SIGTERM, fatal_error_signal); | |
696 #ifdef SIGXCPU | |
697 signal (SIGXCPU, fatal_error_signal); | |
698 #endif | |
699 #ifdef SIGXFSZ | |
700 signal (SIGXFSZ, fatal_error_signal); | |
701 #endif /* SIGXFSZ */ | |
702 | |
703 #ifdef SIGDANGER | |
704 /* This just means available memory is getting low. */ | |
705 signal (SIGDANGER, memory_warning_signal); | |
706 #endif | |
707 | |
708 #ifdef SIGLOST | 735 #ifdef SIGLOST |
709 signal (SIGLOST, fatal_error_signal); | 736 handle_signal_if_fatal (SIGLOST); |
710 #endif | 737 #endif |
711 #ifdef SIGSTKFLT /* coprocessor stack fault under Linux */ | 738 #ifdef SIGSTKFLT /* coprocessor stack fault under Linux */ |
712 signal (SIGSTKFLT, fatal_error_signal); | 739 handle_signal_if_fatal (SIGSTKFLT); |
713 #endif | |
714 #ifdef SIGUSR1 | |
715 signal (SIGUSR1, fatal_error_signal); | |
716 #endif | |
717 #ifdef SIGUSR2 | |
718 signal (SIGUSR2, fatal_error_signal); | |
719 #endif | |
720 #ifdef SIGALRM | |
721 /* This will get reset later, once we're capable of handling | |
722 this properly. */ | |
723 signal (SIGALRM, fatal_error_signal); | |
724 #endif | |
725 #ifdef SIGVTALRM | |
726 signal (SIGVTALRM, fatal_error_signal); | |
727 #endif | |
728 #ifdef SIGPROF | |
729 /* Messes up the REAL profiler */ | |
730 /* signal (SIGPROF, fatal_error_signal); */ | |
731 #endif | 740 #endif |
732 #ifdef SIGUNUSED /* exists under Linux, and will kill process! */ | 741 #ifdef SIGUNUSED /* exists under Linux, and will kill process! */ |
733 signal (SIGUNUSED, fatal_error_signal); | 742 handle_signal_if_fatal (SIGUNUSED); |
734 #endif | 743 #endif |
735 | 744 |
736 #ifdef AIX | 745 #ifdef AIX |
737 /* 20 is SIGCHLD, 21 is SIGTTIN, 22 is SIGTTOU. */ | 746 /* 20 is SIGCHLD, 21 is SIGTTIN, 22 is SIGTTOU. */ |
738 #ifndef _I386 | 747 #ifndef _I386 |
739 signal (SIGIOINT, fatal_error_signal); | 748 handle_signal_if_fatal (SIGIOINT); |
740 #endif | 749 #endif |
741 signal (SIGGRANT, fatal_error_signal); | 750 handle_signal_if_fatal (SIGGRANT); |
742 signal (SIGRETRACT, fatal_error_signal); | 751 handle_signal_if_fatal (SIGRETRACT); |
743 signal (SIGSOUND, fatal_error_signal); | 752 handle_signal_if_fatal (SIGSOUND); |
744 signal (SIGMSG, fatal_error_signal); | 753 handle_signal_if_fatal (SIGMSG); |
745 #endif /* AIX */ | 754 #endif /* AIX */ |
746 } | 755 |
756 #ifdef SIGDANGER | |
757 /* This just means available memory is getting low. */ | |
758 signal (SIGDANGER, memory_warning_signal); | |
759 #endif | |
747 } | 760 } |
748 | 761 |
749 void | 762 void |
750 syms_of_signal (void) | 763 syms_of_signal (void) |
751 { | 764 { |
764 signal (SIGQUIT, interrupt_signal); | 777 signal (SIGQUIT, interrupt_signal); |
765 #endif /* HAVE_TERMIO */ | 778 #endif /* HAVE_TERMIO */ |
766 init_async_timeouts (); | 779 init_async_timeouts (); |
767 #ifdef SIGIO | 780 #ifdef SIGIO |
768 signal (SIGIO, input_available_signal); | 781 signal (SIGIO, input_available_signal); |
769 # ifdef SIGPOLL | 782 # ifdef SIGPOLL /* XPG5 */ |
770 /* Some systems (e.g. Motorola SVR4) losingly have different | 783 /* Some systems (e.g. Motorola SVR4) losingly have different |
771 values for SIGIO and SIGPOLL, and send SIGPOLL instead of | 784 values for SIGIO and SIGPOLL, and send SIGPOLL instead of |
772 SIGIO. On those same systems, an uncaught SIGPOLL kills the | 785 SIGIO. On those same systems, an uncaught SIGPOLL kills the |
773 process. */ | 786 process. */ |
774 signal (SIGPOLL, input_available_signal); | 787 signal (SIGPOLL, input_available_signal); |