annotate src/syssignal.h @ 413:901169e5ca31

Added tag r21-2-14 for changeset 697ef44129c6
author cvs
date Mon, 13 Aug 2007 11:20:44 +0200
parents 697ef44129c6
children 11054d720c21
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1 /* syssignal.h - System-dependent definitions for signals.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2 Copyright (C) 1992, 1993 Free Software Foundation, Inc.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4 This file is part of XEmacs.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
6 XEmacs is free software; you can redistribute it and/or modify it
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
7 under the terms of the GNU General Public License as published by the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
8 Free Software Foundation; either version 2, or (at your option) any
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
9 later version.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
10
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
14 for more details.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
15
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
17 along with XEmacs; see the file COPYING. If not, write to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
19 Boston, MA 02111-1307, USA. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
20
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
21 /* Synched up with: FSF 19.30. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
22
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 410
diff changeset
23 #ifndef _XEMACS_SYSSIGNAL_H_
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 410
diff changeset
24 #define _XEMACS_SYSSIGNAL_H_
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
25
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
26 /* In the old world, one could not #include <signal.h> here. The party line
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
27 was that that header should always be #included before <config.h>, because
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
28 some configuration files (like s/hpux.h) indicate that SIGIO doesn't work
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
29 by #undef-ing SIGIO, and if this file #includes <signal.h>, then that will
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
30 re-#define SIGIO and confuse things.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
31
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
32 This was, however, a completely fucked up state of affairs, because on some
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
33 systems it's necessary for the s/m files to #define things in order to get
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
34 <signal.h> to provide the right typedefs, etc. And it's generally a broken
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
35 concept for <config.h> to not be the very very first file included.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
36
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
37 So instead of #undef'ing SIGIO in the various s/m files, I've changed them
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
38 to define BROKEN_SIGIO instead, then we (syssignal.h) do an #undef SIGIO
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
39 at the end, after including signal.h. Therefore, it's important that
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
40 <signal.h> not be included after "syssignal.h", but that's the normal state:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
41 nothing should be directly including <signal.h> these days.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
42 -- jwz, 29-nov-93
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
43 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
44
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
45 #include <signal.h>
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
46 #include <errno.h>
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
47
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
48 /* SIGPOLL is the SVR4 signal. Those systems generally define
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
49 SIGIO as an alias for SIGPOLL, but just in case ... */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
50
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
51 #if defined (BROKEN_SIGIO)
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 272
diff changeset
52 # if defined (SIGIO) && defined (SIGPOLL)
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 272
diff changeset
53 # if SIGIO == SIGPOLL
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 272
diff changeset
54 # undef SIGIO
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 272
diff changeset
55 # undef SIGPOLL
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 272
diff changeset
56 # else
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 272
diff changeset
57 # undef SIGIO
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 272
diff changeset
58 # endif
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 272
diff changeset
59 # endif
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 272
diff changeset
60 #else /* Not BROKEN_SIGIO */
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 272
diff changeset
61 # if !defined (SIGIO) && defined (SIGPOLL)
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 272
diff changeset
62 # define SIGIO SIGPOLL
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 272
diff changeset
63 # endif
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
64 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
65
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
66 /* Define SIGCHLD as an alias for SIGCLD. There are many conditionals
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
67 testing SIGCHLD. */
209
41ff10fd062f Import from CVS: tag r20-4b3
cvs
parents: 100
diff changeset
68 #if defined (SIGCLD) && !defined (SIGCHLD)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
69 # define SIGCHLD SIGCLD
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
70 #endif /* SIGCHLD */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
71
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
72 #ifdef BROKEN_SIGCHLD
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
73 #undef SIGCHLD
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
74 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
75
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
76 #ifdef SIGCHLD
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
77 #define EMACS_BLOCK_SIGCHLD EMACS_BLOCK_SIGNAL (SIGCHLD)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
78 #define EMACS_UNBLOCK_SIGCHLD EMACS_UNBLOCK_SIGNAL (SIGCHLD)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
79 #else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
80 #define EMACS_BLOCK_SIGCHLD
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
81 #define EMACS_UNBLOCK_SIGCHLD
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
82 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
83
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
84 /* According to W.R. Stevens __Advanced Programming in the Unix
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
85 Environment__, there are four different paradigms for handling
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
86 signals. We use autoconf to tell us which one applies.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
87
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
88 Note that on some systems, more than one paradigm is implemented
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
89 (typically, the POSIX sigaction/sigprocmask and either the older
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
90 SYSV or BSD way). In such a case, we prefer the POSIX way.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
91
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
92 NOTE: We use EMACS_* macros for most signal operations, but
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
93 just signal() for the standard signal-setting operation.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
94 Perhaps we should change this to EMACS_SIGNAL(), but that runs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
95 the risk of someone forgetting this convention and calling
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
96 signal() directly. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
97
78
c7528f8e288d Import from CVS: tag r20-0b34
cvs
parents: 74
diff changeset
98 #ifndef NeXT
74
54cc21c15cbb Import from CVS: tag r20-0b32
cvs
parents: 70
diff changeset
99 typedef SIGTYPE (*signal_handler_t) (int);
78
c7528f8e288d Import from CVS: tag r20-0b34
cvs
parents: 74
diff changeset
100 #endif
74
54cc21c15cbb Import from CVS: tag r20-0b32
cvs
parents: 70
diff changeset
101
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
102 #if defined (HAVE_SIGPROCMASK)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
103
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
104 /* The POSIX way (sigaction, sigprocmask, sigpending, sigsuspend) */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
105
272
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 223
diff changeset
106 signal_handler_t sys_do_signal (int signal_number, signal_handler_t action);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
107 /* Provide our own version of signal(), that calls sigaction(). The
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
108 name is not sys_signal() because a function of that name exists in
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
109 libenergize.a */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
110 #undef signal
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
111 #define signal sys_do_signal
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
112
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
113 #define EMACS_BLOCK_SIGNAL(sig) do \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
114 { \
380
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 371
diff changeset
115 sigset_t ES_mask; \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 371
diff changeset
116 sigemptyset (&ES_mask); \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 371
diff changeset
117 sigaddset (&ES_mask, sig); \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 371
diff changeset
118 sigprocmask (SIG_BLOCK, &ES_mask, NULL); \
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
119 } while (0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
120 #define EMACS_UNBLOCK_SIGNAL(sig) do \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
121 { \
380
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 371
diff changeset
122 sigset_t ES_mask; \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 371
diff changeset
123 sigemptyset (&ES_mask); \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 371
diff changeset
124 sigaddset (&ES_mask, sig); \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 371
diff changeset
125 sigprocmask (SIG_UNBLOCK, &ES_mask, NULL); \
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
126 } while (0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
127 #define EMACS_UNBLOCK_ALL_SIGNALS() do \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
128 { \
380
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 371
diff changeset
129 sigset_t ES_mask; \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 371
diff changeset
130 sigemptyset (&ES_mask); \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 371
diff changeset
131 sigprocmask (SIG_SETMASK, &ES_mask, NULL); \
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
132 } while (0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
133 #define EMACS_WAIT_FOR_SIGNAL(sig) do \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
134 { \
380
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 371
diff changeset
135 sigset_t ES_mask; \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 371
diff changeset
136 sigprocmask (0, NULL, &ES_mask); \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 371
diff changeset
137 sigdelset (&ES_mask, sig); \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 371
diff changeset
138 sigsuspend (&ES_mask); \
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
139 } while (0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
140 #define EMACS_REESTABLISH_SIGNAL(sig, handler)
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 272
diff changeset
141
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
142 #elif defined (HAVE_SIGBLOCK)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
143
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
144 /* The older BSD way (signal/sigvec, sigblock, sigsetmask, sigpause) */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
145
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
146 /* It's OK to use signal() here directly. No unreliable signal
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
147 problems. However, we use sigvec() because it allows us to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
148 request interruptible I/O. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
149
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
150 #define signal sys_do_signal
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
151
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
152 /* Is it necessary to define sigmask like this? */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
153 #ifndef sigmask
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
154 # define sigmask(no) (1L << ((no) - 1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
155 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
156
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
157 #define EMACS_BLOCK_SIGNAL(sig) sigblock (sigmask (sig))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
158 #define EMACS_UNBLOCK_SIGNAL(sig) sigsetmask (sigblock (0) & ~sigmask (sig))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
159 #define EMACS_UNBLOCK_ALL_SIGNALS() sigsetmask (0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
160 #define EMACS_WAIT_FOR_SIGNAL(sig) do \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
161 { \
380
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 371
diff changeset
162 int ES_mask = sigblock (0); \
8626e4521993 Import from CVS: tag r21-2-5
cvs
parents: 371
diff changeset
163 sigpause (ES_mask & ~sigmask (sig)); \
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
164 } while (0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
165 #define EMACS_REESTABLISH_SIGNAL(sig, handler)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
166
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
167 #elif defined (HAVE_SIGHOLD)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
168
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
169 /* The older SYSV way (signal/sigset, sighold, sigrelse, sigignore,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
170 sigpause) */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
171
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
172 #define signal sigset
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
173 #define EMACS_BLOCK_SIGNAL(sig) sighold (sig)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
174 #define EMACS_UNBLOCK_SIGNAL(sig) sigrelse (sig)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
175 /* #### There's not really any simple way to implement this.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
176 Since EMACS_UNBLOCK_ALL_SIGNALS() is only called once (at startup),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
177 it's probably OK to just ignore it. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
178 #define EMACS_UNBLOCK_ALL_SIGNALS() 0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
179 #define EMACS_WAIT_FOR_SIGNAL(sig) sigpause (sig)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
180 #define EMACS_REESTABLISH_SIGNAL(sig, handler)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
181
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
182 #else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
183
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
184 /* The oldest SYSV way (signal only; unreliable signals) */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
185
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
186 /* Old USG systems don't really have signal blocking.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
187 We indicate this by not defining EMACS_BLOCK_SIGNAL or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
188 EMACS_WAIT_FOR_SIGNAL. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
189 #define EMACS_UNBLOCK_SIGNAL(sig) 0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
190 #define EMACS_UNBLOCK_ALL_SIGNALS() 0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
191 #define EMACS_REESTABLISH_SIGNAL(sig, handler) do \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
192 { \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
193 int old_errno = errno; \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
194 signal (sig, handler); \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
195 errno = old_errno; \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
196 } while (0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
197
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
198 /* Under SYSV, setting a signal handler for SIGCLD causes
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
199 SIGCLD to immediately be sent if there any unwaited processes
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
200 out there. This means that the SIGCLD handler *must* call
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
201 wait() to reap the status of all processes -- it cannot
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
202 simply set a flag and then reestablish the handler, because
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
203 it will get called again, infinitely. We only need to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
204 worry about this on systems where signals need to be
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
205 reestablished (SYSV Release 2 and earlier). */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
206 #define OBNOXIOUS_SYSV_SIGCLD_BEHAVIOR
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
207
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
208 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
209
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
210 /* On bsd, [man says] kill does not accept a negative number to kill a pgrp.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
211 Must do that using the killpg call. */
371
cc15677e0335 Import from CVS: tag r21-2b1
cvs
parents: 369
diff changeset
212 #ifdef BSD
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
213 #define EMACS_KILLPG(gid, signo) killpg (gid, signo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
214 #else
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 410
diff changeset
215 #ifdef WINDOWSNT
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 410
diff changeset
216 #define EMACS_KILLPG(gid, signo) (kill (gid, signo))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
217 #else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
218 #define EMACS_KILLPG(gid, signo) kill (-(gid), signo)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
219 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
220 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
221
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
222 #ifndef NSIG
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
223 # define NSIG (SIGUSR2+1) /* guess how many elements are in sys_siglist... */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
224 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
225
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
226 /* SYS_SIGLIST_DECLARED is determined by configure. On Linux, it seems,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
227 configure incorrectly fails to find it, so s/linux.h defines
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
228 HAVE_SYS_SIGLIST. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
229 #if !defined (SYS_SIGLIST_DECLARED) && !defined (HAVE_SYS_SIGLIST)
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 410
diff changeset
230 extern CONST char *sys_siglist[];
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
231 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
232
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
233 #ifdef SIGDANGER
272
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 223
diff changeset
234 SIGTYPE memory_warning_signal (int sig);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
235 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
236
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 410
diff changeset
237 #ifdef _WIN32
223
2c611d1463a6 Import from CVS: tag r20-4b10
cvs
parents: 209
diff changeset
238 /* Prototypes for signal functions, see nt.c */
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 410
diff changeset
239 typedef void (__cdecl *msw_sighandler) (int);
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 410
diff changeset
240 msw_sighandler msw_sigset (int sig, msw_sighandler handler);
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 410
diff changeset
241 int msw_sighold (int nsig);
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 410
diff changeset
242 int msw_sigrelse (int nsig);
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 410
diff changeset
243 int msw_sigpause (int nsig);
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 410
diff changeset
244 int msw_raise (int nsig);
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 410
diff changeset
245 #endif /* _WIN32 */
223
2c611d1463a6 Import from CVS: tag r20-4b10
cvs
parents: 209
diff changeset
246
412
697ef44129c6 Import from CVS: tag r21-2-14
cvs
parents: 410
diff changeset
247 #endif /* _XEMACS_SYSSIGNAL_H_ */