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);