annotate Modules/signalmodule.c @ 79675:c0a2294de787 2.7

Issue #16199: Backport 2to3 typo fix from 3.2.
author Chris Jerdonek <chris.jerdonek@gmail.com>
date Thu, 11 Oct 2012 16:15:46 -0700
parents c3649173d093
children 9b711422c98f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
1
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1888
diff changeset
2 /* Signal module -- many thanks to Lance Ellinghaus */
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
5287
5af766a1b531 Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents: 5101
diff changeset
4 /* XXX Signals should be recorded per thread, now we have thread state. */
5af766a1b531 Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents: 5101
diff changeset
5
1888
be956b1efb97 * various modules: #include "Python.h" and remove most remporary
Guido van Rossum <guido@python.org>
parents: 1867
diff changeset
6 #include "Python.h"
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 #include "intrcheck.h"
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
8
24071
8142f8d668a0 Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents: 23843
diff changeset
9 #ifdef MS_WINDOWS
60197
0ab89e8bdedc Implement #1220212. Add os.kill support for Windows.
Brian Curtin <brian.curtin@gmail.com>
parents: 59040
diff changeset
10 #include <Windows.h>
59040
31cb61e0f2bc #7706: add include guards where they're missing; required for Windows CE
Andrew M. Kuchling <amk@amk.ca>
parents: 55570
diff changeset
11 #ifdef HAVE_PROCESS_H
5287
5af766a1b531 Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents: 5101
diff changeset
12 #include <process.h>
5af766a1b531 Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents: 5101
diff changeset
13 #endif
59040
31cb61e0f2bc #7706: add include guards where they're missing; required for Windows CE
Andrew M. Kuchling <amk@amk.ca>
parents: 55570
diff changeset
14 #endif
5287
5af766a1b531 Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents: 5101
diff changeset
15
59040
31cb61e0f2bc #7706: add include guards where they're missing; required for Windows CE
Andrew M. Kuchling <amk@amk.ca>
parents: 55570
diff changeset
16 #ifdef HAVE_SIGNAL_H
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 #include <signal.h>
59040
31cb61e0f2bc #7706: add include guards where they're missing; required for Windows CE
Andrew M. Kuchling <amk@amk.ca>
parents: 55570
diff changeset
18 #endif
31cb61e0f2bc #7706: add include guards where they're missing; required for Windows CE
Andrew M. Kuchling <amk@amk.ca>
parents: 55570
diff changeset
19 #ifdef HAVE_SYS_STAT_H
44355
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
20 #include <sys/stat.h>
59040
31cb61e0f2bc #7706: add include guards where they're missing; required for Windows CE
Andrew M. Kuchling <amk@amk.ca>
parents: 55570
diff changeset
21 #endif
46055
02ae311256a7 Conditionalize sys/time.h inclusion.
Martin v. Löwis <martin@v.loewis.de>
parents: 46053
diff changeset
22 #ifdef HAVE_SYS_TIME_H
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
23 #include <sys/time.h>
46055
02ae311256a7 Conditionalize sys/time.h inclusion.
Martin v. Löwis <martin@v.loewis.de>
parents: 46053
diff changeset
24 #endif
44355
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
25
1678
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
26 #ifndef SIG_ERR
14638
2e170c2f61e1 Use typedef PyOS_sighandler_t and APIs PyOS_getsig() and
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
27 #define SIG_ERR ((PyOS_sighandler_t)(-1))
1678
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
28 #endif
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
29
22114
c454b76d51e7 OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 21715
diff changeset
30 #if defined(PYOS_OS2) && !defined(PYCC_GCC)
6626
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6578
diff changeset
31 #define NSIG 12
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6578
diff changeset
32 #include <process.h>
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6578
diff changeset
33 #endif
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6578
diff changeset
34
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1888
diff changeset
35 #ifndef NSIG
13338
a7f72022b93a Fixed symbol search for defining NSIG. It now also checks _NSIG
Marc-André Lemburg <mal@egenix.com>
parents: 13256
diff changeset
36 # if defined(_NSIG)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
37 # define NSIG _NSIG /* For BSD/SysV */
13338
a7f72022b93a Fixed symbol search for defining NSIG. It now also checks _NSIG
Marc-André Lemburg <mal@egenix.com>
parents: 13256
diff changeset
38 # elif defined(_SIGMAX)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
39 # define NSIG (_SIGMAX + 1) /* For QNX */
13338
a7f72022b93a Fixed symbol search for defining NSIG. It now also checks _NSIG
Marc-André Lemburg <mal@egenix.com>
parents: 13256
diff changeset
40 # elif defined(SIGMAX)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
41 # define NSIG (SIGMAX + 1) /* For djgpp */
13338
a7f72022b93a Fixed symbol search for defining NSIG. It now also checks _NSIG
Marc-André Lemburg <mal@egenix.com>
parents: 13256
diff changeset
42 # else
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
43 # define NSIG 64 /* Use a reasonable default value */
13338
a7f72022b93a Fixed symbol search for defining NSIG. It now also checks _NSIG
Marc-André Lemburg <mal@egenix.com>
parents: 13256
diff changeset
44 # endif
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1888
diff changeset
45 #endif
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1888
diff changeset
46
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1888
diff changeset
47
1678
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
48 /*
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
49 NOTES ON THE INTERACTION BETWEEN SIGNALS AND THREADS
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
50
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
51 When threads are supported, we want the following semantics:
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
52
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
53 - only the main thread can set a signal handler
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
54 - any thread can get a signal handler
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
55 - signals are only delivered to the main thread
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
56
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
57 I.e. we don't support "synchronous signals" like SIGFPE (catching
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
58 this doesn't make much sense in Python anyway) nor do we support
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
59 signals as a means of inter-thread communication, since not all
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
60 thread implementations support that (at least our thread library
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
61 doesn't).
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
62
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
63 We still have the problem that in some implementations signals
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
64 generated by the keyboard (e.g. SIGINT) are delivered to all
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
65 threads (e.g. SGI), while in others (e.g. Solaris) such signals are
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
66 delivered to one random thread (an intermediate possibility would
2126
af36bae343fc cosmetics
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
67 be to deliver it to the main thread -- POSIX?). For now, we have
1678
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
68 a working implementation that works in all three cases -- the
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
69 handler ignores signals if getpid() isn't the same as in the main
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
70 thread. XXX This is a hack.
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
71
14674
756c8c6535fe Make better use of GNU Pth -- patch by Andy Dustman.
Guido van Rossum <guido@python.org>
parents: 14638
diff changeset
72 GNU pth is a user-space threading library, and as such, all threads
756c8c6535fe Make better use of GNU Pth -- patch by Andy Dustman.
Guido van Rossum <guido@python.org>
parents: 14638
diff changeset
73 run within the same process. In this case, if the currently running
756c8c6535fe Make better use of GNU Pth -- patch by Andy Dustman.
Guido van Rossum <guido@python.org>
parents: 14638
diff changeset
74 thread is not the main_thread, send the signal to the main_thread.
1678
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
75 */
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
76
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
77 #ifdef WITH_THREAD
5730
996079744566 Add sys/types.h include for pid_t when threading.
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
78 #include <sys/types.h> /* For pid_t */
9203
07dae6fdae79 Renamed thread.h to pythread.h.
Guido van Rossum <guido@python.org>
parents: 9127
diff changeset
79 #include "pythread.h"
1678
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
80 static long main_thread;
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
81 static pid_t main_pid;
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
82 #endif
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
83
4863
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
84 static struct {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
85 int tripped;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
86 PyObject *func;
4863
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
87 } Handlers[NSIG];
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
88
44355
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
89 static sig_atomic_t wakeup_fd = -1;
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
90
44264
a4aab72c2cc0 Backport patch #1643738.
Guido van Rossum <guido@python.org>
parents: 36324
diff changeset
91 /* Speed up sigcheck() when none tripped */
a4aab72c2cc0 Backport patch #1643738.
Guido van Rossum <guido@python.org>
parents: 36324
diff changeset
92 static volatile sig_atomic_t is_tripped = 0;
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
93
4863
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
94 static PyObject *DefaultHandler;
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
95 static PyObject *IgnoreHandler;
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
96 static PyObject *IntHandler;
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
97
16998
4f9db834825c Document SIG_* warning causes on Solaris.
Martin v. Löwis <martin@v.loewis.de>
parents: 14674
diff changeset
98 /* On Solaris 8, gcc will produce a warning that the function
4f9db834825c Document SIG_* warning causes on Solaris.
Martin v. Löwis <martin@v.loewis.de>
parents: 14674
diff changeset
99 declaration is not a prototype. This is caused by the definition of
4f9db834825c Document SIG_* warning causes on Solaris.
Martin v. Löwis <martin@v.loewis.de>
parents: 14674
diff changeset
100 SIG_DFL as (void (*)())0; the correct declaration would have been
4f9db834825c Document SIG_* warning causes on Solaris.
Martin v. Löwis <martin@v.loewis.de>
parents: 14674
diff changeset
101 (void (*)(int))0. */
4f9db834825c Document SIG_* warning causes on Solaris.
Martin v. Löwis <martin@v.loewis.de>
parents: 14674
diff changeset
102
14638
2e170c2f61e1 Use typedef PyOS_sighandler_t and APIs PyOS_getsig() and
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
103 static PyOS_sighandler_t old_siginthandler = SIG_DFL;
5923
3e158e69ac5d Add finialization routines; fixed some memory leaks related to this.
Guido van Rossum <guido@python.org>
parents: 5730
diff changeset
104
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
105 #ifdef HAVE_GETITIMER
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
106 static PyObject *ItimerError;
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
107
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
108 /* auxiliary functions for setitimer/getitimer */
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
109 static void
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
110 timeval_from_double(double d, struct timeval *tv)
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
111 {
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
112 tv->tv_sec = floor(d);
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
113 tv->tv_usec = fmod(d, 1.0) * 1000000.0;
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
114 }
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
115
49386
642f20b22577 Merged revisions 66748 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 48847
diff changeset
116 Py_LOCAL_INLINE(double)
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
117 double_from_timeval(struct timeval *tv)
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
118 {
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
119 return tv->tv_sec + (double)(tv->tv_usec / 1000000.0);
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
120 }
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
121
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
122 static PyObject *
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
123 itimer_retval(struct itimerval *iv)
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
124 {
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
125 PyObject *r, *v;
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
126
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
127 r = PyTuple_New(2);
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
128 if (r == NULL)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
129 return NULL;
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
130
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
131 if(!(v = PyFloat_FromDouble(double_from_timeval(&iv->it_value)))) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
132 Py_DECREF(r);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
133 return NULL;
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
134 }
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
135
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
136 PyTuple_SET_ITEM(r, 0, v);
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
137
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
138 if(!(v = PyFloat_FromDouble(double_from_timeval(&iv->it_interval)))) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
139 Py_DECREF(r);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
140 return NULL;
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
141 }
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
142
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
143 PyTuple_SET_ITEM(r, 1, v);
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
144
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
145 return r;
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
146 }
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
147 #endif
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
148
1867
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1817
diff changeset
149 static PyObject *
13500
d9cc620ff186 ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
150 signal_default_int_handler(PyObject *self, PyObject *args)
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
151 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
152 PyErr_SetNone(PyExc_KeyboardInterrupt);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
153 return NULL;
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
154 }
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
155
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23550
diff changeset
156 PyDoc_STRVAR(default_int_handler_doc,
8570
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
157 "default_int_handler(...)\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
158 \n\
32361
55ba51bef0a8 silly typo
Michael W. Hudson <mwh@python.net>
parents: 30032
diff changeset
159 The default handler for SIGINT installed by Python.\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23550
diff changeset
160 It raises KeyboardInterrupt.");
8570
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
161
13664
ee10834d67a3 Further ANSIfication of functionpointers and declarations. Also, make sure
Thomas Wouters <thomas@python.org>
parents: 13651
diff changeset
162
ee10834d67a3 Further ANSIfication of functionpointers and declarations. Also, make sure
Thomas Wouters <thomas@python.org>
parents: 13651
diff changeset
163 static int
ee10834d67a3 Further ANSIfication of functionpointers and declarations. Also, make sure
Thomas Wouters <thomas@python.org>
parents: 13651
diff changeset
164 checksignals_witharg(void * unused)
ee10834d67a3 Further ANSIfication of functionpointers and declarations. Also, make sure
Thomas Wouters <thomas@python.org>
parents: 13651
diff changeset
165 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
166 return PyErr_CheckSignals();
13664
ee10834d67a3 Further ANSIfication of functionpointers and declarations. Also, make sure
Thomas Wouters <thomas@python.org>
parents: 13651
diff changeset
167 }
ee10834d67a3 Further ANSIfication of functionpointers and declarations. Also, make sure
Thomas Wouters <thomas@python.org>
parents: 13651
diff changeset
168
13676
5423b132bc97 Removed all instances of RETSIGTYPE from the source code: signal
Tim Peters <tim.peters@gmail.com>
parents: 13673
diff changeset
169 static void
69426
7d355c2ff3d4 (Merge 3.1) Issue #11768: The signal handler of the signal module only calls
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68256
diff changeset
170 trip_signal(int sig_num)
7d355c2ff3d4 (Merge 3.1) Issue #11768: The signal handler of the signal module only calls
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68256
diff changeset
171 {
7d355c2ff3d4 (Merge 3.1) Issue #11768: The signal handler of the signal module only calls
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68256
diff changeset
172 Handlers[sig_num].tripped = 1;
7d355c2ff3d4 (Merge 3.1) Issue #11768: The signal handler of the signal module only calls
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68256
diff changeset
173 if (is_tripped)
7d355c2ff3d4 (Merge 3.1) Issue #11768: The signal handler of the signal module only calls
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68256
diff changeset
174 return;
7d355c2ff3d4 (Merge 3.1) Issue #11768: The signal handler of the signal module only calls
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68256
diff changeset
175 /* Set is_tripped after setting .tripped, as it gets
7d355c2ff3d4 (Merge 3.1) Issue #11768: The signal handler of the signal module only calls
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68256
diff changeset
176 cleared in PyErr_CheckSignals() before .tripped. */
7d355c2ff3d4 (Merge 3.1) Issue #11768: The signal handler of the signal module only calls
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68256
diff changeset
177 is_tripped = 1;
7d355c2ff3d4 (Merge 3.1) Issue #11768: The signal handler of the signal module only calls
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68256
diff changeset
178 Py_AddPendingCall(checksignals_witharg, NULL);
7d355c2ff3d4 (Merge 3.1) Issue #11768: The signal handler of the signal module only calls
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68256
diff changeset
179 if (wakeup_fd != -1)
7d355c2ff3d4 (Merge 3.1) Issue #11768: The signal handler of the signal module only calls
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68256
diff changeset
180 write(wakeup_fd, "\0", 1);
7d355c2ff3d4 (Merge 3.1) Issue #11768: The signal handler of the signal module only calls
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68256
diff changeset
181 }
7d355c2ff3d4 (Merge 3.1) Issue #11768: The signal handler of the signal module only calls
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68256
diff changeset
182
7d355c2ff3d4 (Merge 3.1) Issue #11768: The signal handler of the signal module only calls
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68256
diff changeset
183 static void
13500
d9cc620ff186 ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
184 signal_handler(int sig_num)
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
185 {
65986
185ab7c4b946 Merged revisions 86214 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 65044
diff changeset
186 int save_errno = errno;
185ab7c4b946 Merged revisions 86214 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 65044
diff changeset
187
185ab7c4b946 Merged revisions 86214 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 65044
diff changeset
188 #if defined(WITH_THREAD) && defined(WITH_PTH)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
189 if (PyThread_get_thread_ident() != main_thread) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
190 pth_raise(*(pth_t *) main_thread, sig_num);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
191 }
65986
185ab7c4b946 Merged revisions 86214 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 65044
diff changeset
192 else
14674
756c8c6535fe Make better use of GNU Pth -- patch by Andy Dustman.
Guido van Rossum <guido@python.org>
parents: 14638
diff changeset
193 #endif
65986
185ab7c4b946 Merged revisions 86214 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 65044
diff changeset
194 {
185ab7c4b946 Merged revisions 86214 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 65044
diff changeset
195 #ifdef WITH_THREAD
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
196 /* See NOTES section above */
65986
185ab7c4b946 Merged revisions 86214 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 65044
diff changeset
197 if (getpid() == main_pid)
1678
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
198 #endif
65986
185ab7c4b946 Merged revisions 86214 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 65044
diff changeset
199 {
69426
7d355c2ff3d4 (Merge 3.1) Issue #11768: The signal handler of the signal module only calls
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68256
diff changeset
200 trip_signal(sig_num);
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
201 }
65986
185ab7c4b946 Merged revisions 86214 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 65044
diff changeset
202
185ab7c4b946 Merged revisions 86214 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 65044
diff changeset
203 #ifndef HAVE_SIGACTION
1888
be956b1efb97 * various modules: #include "Python.h" and remove most remporary
Guido van Rossum <guido@python.org>
parents: 1867
diff changeset
204 #ifdef SIGCHLD
65986
185ab7c4b946 Merged revisions 86214 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 65044
diff changeset
205 /* To avoid infinite recursion, this signal remains
185ab7c4b946 Merged revisions 86214 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 65044
diff changeset
206 reset until explicit re-instated.
185ab7c4b946 Merged revisions 86214 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 65044
diff changeset
207 Don't clear the 'func' field as it is our pointer
185ab7c4b946 Merged revisions 86214 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 65044
diff changeset
208 to the Python handler... */
185ab7c4b946 Merged revisions 86214 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 65044
diff changeset
209 if (sig_num != SIGCHLD)
1888
be956b1efb97 * various modules: #include "Python.h" and remove most remporary
Guido van Rossum <guido@python.org>
parents: 1867
diff changeset
210 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
211 /* If the handler was not set up with sigaction, reinstall it. See
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
212 * Python/pythonrun.c for the implementation of PyOS_setsig which
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
213 * makes this true. See also issue8354. */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
214 PyOS_setsig(sig_num, signal_handler);
61445
fb719049044f Merged revisions 81007 via svnmerge from
Jean-Paul Calderone <exarkun@divmod.com>
parents: 49386
diff changeset
215 #endif
65986
185ab7c4b946 Merged revisions 86214 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 65044
diff changeset
216 }
185ab7c4b946 Merged revisions 86214 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 65044
diff changeset
217
185ab7c4b946 Merged revisions 86214 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 65044
diff changeset
218 /* Issue #10311: asynchronously executing signal handlers should not
185ab7c4b946 Merged revisions 86214 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 65044
diff changeset
219 mutate errno under the feet of unsuspecting C code. */
185ab7c4b946 Merged revisions 86214 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 65044
diff changeset
220 errno = save_errno;
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
221 }
2521
e7d480cf16ba added PyErr_SetInterrupt(); NT ifdefs
Guido van Rossum <guido@python.org>
parents: 2211
diff changeset
222
1867
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1817
diff changeset
223
6142
144db635b49d Added configuration tests for presence of alarm(), pause(), and getpwent()
Guido van Rossum <guido@python.org>
parents: 5923
diff changeset
224 #ifdef HAVE_ALARM
1867
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1817
diff changeset
225 static PyObject *
13500
d9cc620ff186 ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
226 signal_alarm(PyObject *self, PyObject *args)
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1678
diff changeset
227 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
228 int t;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
229 if (!PyArg_ParseTuple(args, "i:alarm", &t))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
230 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
231 /* alarm() returns the number of seconds remaining */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
232 return PyInt_FromLong((long)alarm(t));
1817
20e1d296fdcc * Modules/signalmodule.c: added pause().
Guido van Rossum <guido@python.org>
parents: 1746
diff changeset
233 }
8570
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
234
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23550
diff changeset
235 PyDoc_STRVAR(alarm_doc,
8570
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
236 "alarm(seconds)\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
237 \n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23550
diff changeset
238 Arrange for SIGALRM to arrive after the given number of seconds.");
2521
e7d480cf16ba added PyErr_SetInterrupt(); NT ifdefs
Guido van Rossum <guido@python.org>
parents: 2211
diff changeset
239 #endif
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1678
diff changeset
240
6142
144db635b49d Added configuration tests for presence of alarm(), pause(), and getpwent()
Guido van Rossum <guido@python.org>
parents: 5923
diff changeset
241 #ifdef HAVE_PAUSE
2123
fd5ab7e828fc cosmetic changes so these modules will work with the strict new naming scheme
Guido van Rossum <guido@python.org>
parents: 2076
diff changeset
242 static PyObject *
22561
043ad7adc896 Remove many uses of PyArg_NoArgs macro, change METH_OLDARGS to METH_NOARGS.
Neal Norwitz <nnorwitz@gmail.com>
parents: 22114
diff changeset
243 signal_pause(PyObject *self)
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
244 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
245 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
246 (void)pause();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
247 Py_END_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
248 /* make sure that any exceptions that got raised are propagated
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
249 * back into Python
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
250 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
251 if (PyErr_CheckSignals())
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
252 return NULL;
4863
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
253
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
254 Py_INCREF(Py_None);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
255 return Py_None;
1867
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1817
diff changeset
256 }
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23550
diff changeset
257 PyDoc_STRVAR(pause_doc,
8696
f7b4db0c5b08 (pause_doc): Sun CC complains about newline in string literal
Barry Warsaw <barry@python.org>
parents: 8571
diff changeset
258 "pause()\n\
f7b4db0c5b08 (pause_doc): Sun CC complains about newline in string literal
Barry Warsaw <barry@python.org>
parents: 8571
diff changeset
259 \n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23550
diff changeset
260 Wait until a signal arrives.");
8570
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
261
2521
e7d480cf16ba added PyErr_SetInterrupt(); NT ifdefs
Guido van Rossum <guido@python.org>
parents: 2211
diff changeset
262 #endif
1867
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1817
diff changeset
263
14638
2e170c2f61e1 Use typedef PyOS_sighandler_t and APIs PyOS_getsig() and
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
264
1867
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1817
diff changeset
265 static PyObject *
13500
d9cc620ff186 ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
266 signal_signal(PyObject *self, PyObject *args)
1867
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1817
diff changeset
267 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
268 PyObject *obj;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
269 int sig_num;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
270 PyObject *old_handler;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
271 void (*func)(int);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
272 if (!PyArg_ParseTuple(args, "iO:signal", &sig_num, &obj))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
273 return NULL;
63778
3075a7e85c18 Merged revisions 83763 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61463
diff changeset
274 #ifdef MS_WINDOWS
3075a7e85c18 Merged revisions 83763 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61463
diff changeset
275 /* Validate that sig_num is one of the allowable signals */
64492
2c2a38e0cf30 Merged revisions 84556 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 63778
diff changeset
276 switch (sig_num) {
2c2a38e0cf30 Merged revisions 84556 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 63778
diff changeset
277 case SIGABRT: break;
65044
0622d4d08af0 Merged revisions 85140 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 64492
diff changeset
278 #ifdef SIGBREAK
0622d4d08af0 Merged revisions 85140 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 64492
diff changeset
279 /* Issue #10003: SIGBREAK is not documented as permitted, but works
0622d4d08af0 Merged revisions 85140 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 64492
diff changeset
280 and corresponds to CTRL_BREAK_EVENT. */
0622d4d08af0 Merged revisions 85140 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 64492
diff changeset
281 case SIGBREAK: break;
0622d4d08af0 Merged revisions 85140 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 64492
diff changeset
282 #endif
64492
2c2a38e0cf30 Merged revisions 84556 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 63778
diff changeset
283 case SIGFPE: break;
2c2a38e0cf30 Merged revisions 84556 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 63778
diff changeset
284 case SIGILL: break;
2c2a38e0cf30 Merged revisions 84556 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 63778
diff changeset
285 case SIGINT: break;
2c2a38e0cf30 Merged revisions 84556 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 63778
diff changeset
286 case SIGSEGV: break;
2c2a38e0cf30 Merged revisions 84556 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 63778
diff changeset
287 case SIGTERM: break;
2c2a38e0cf30 Merged revisions 84556 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 63778
diff changeset
288 default:
2c2a38e0cf30 Merged revisions 84556 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 63778
diff changeset
289 PyErr_SetString(PyExc_ValueError, "invalid signal value");
2c2a38e0cf30 Merged revisions 84556 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 63778
diff changeset
290 return NULL;
63778
3075a7e85c18 Merged revisions 83763 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61463
diff changeset
291 }
3075a7e85c18 Merged revisions 83763 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61463
diff changeset
292 #endif
1678
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
293 #ifdef WITH_THREAD
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
294 if (PyThread_get_thread_ident() != main_thread) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
295 PyErr_SetString(PyExc_ValueError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
296 "signal only works in main thread");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
297 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
298 }
1678
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
299 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
300 if (sig_num < 1 || sig_num >= NSIG) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
301 PyErr_SetString(PyExc_ValueError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
302 "signal number out of range");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
303 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
304 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
305 if (obj == IgnoreHandler)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
306 func = SIG_IGN;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
307 else if (obj == DefaultHandler)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
308 func = SIG_DFL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
309 else if (!PyCallable_Check(obj)) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
310 PyErr_SetString(PyExc_TypeError,
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
311 "signal handler must be signal.SIG_IGN, signal.SIG_DFL, or a callable object");
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
312 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
313 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
314 else
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
315 func = signal_handler;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
316 if (PyOS_setsig(sig_num, func) == SIG_ERR) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
317 PyErr_SetFromErrno(PyExc_RuntimeError);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
318 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
319 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
320 old_handler = Handlers[sig_num].func;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
321 Handlers[sig_num].tripped = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
322 Py_INCREF(obj);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
323 Handlers[sig_num].func = obj;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
324 return old_handler;
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
325 }
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
326
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23550
diff changeset
327 PyDoc_STRVAR(signal_doc,
8570
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
328 "signal(sig, action) -> action\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
329 \n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
330 Set the action for the given signal. The action can be SIG_DFL,\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
331 SIG_IGN, or a callable Python object. The previous action is\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
332 returned. See getsignal() for possible return values.\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
333 \n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
334 *** IMPORTANT NOTICE ***\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
335 A signal handler function is called with two arguments:\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23550
diff changeset
336 the first is the signal number, the second is the interrupted stack frame.");
8570
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
337
14638
2e170c2f61e1 Use typedef PyOS_sighandler_t and APIs PyOS_getsig() and
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
338
1867
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1817
diff changeset
339 static PyObject *
13500
d9cc620ff186 ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
340 signal_getsignal(PyObject *self, PyObject *args)
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
341 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
342 int sig_num;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
343 PyObject *old_handler;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
344 if (!PyArg_ParseTuple(args, "i:getsignal", &sig_num))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
345 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
346 if (sig_num < 1 || sig_num >= NSIG) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
347 PyErr_SetString(PyExc_ValueError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
348 "signal number out of range");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
349 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
350 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
351 old_handler = Handlers[sig_num].func;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
352 Py_INCREF(old_handler);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
353 return old_handler;
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
354 }
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
355
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23550
diff changeset
356 PyDoc_STRVAR(getsignal_doc,
8570
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
357 "getsignal(sig) -> action\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
358 \n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
359 Return the current action for the given signal. The return value can be:\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
360 SIG_IGN -- if the signal is being ignored\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
361 SIG_DFL -- if the default action for the signal is in effect\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
362 None -- if an unknown handler is in effect\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23550
diff changeset
363 anything else -- the callable Python object used as a handler");
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
364
45452
3657c27ea2fd Issue 1089358. Adds the siginterrupt() function, that is just a
Facundo Batista <facundobatista@gmail.com>
parents: 44355
diff changeset
365 #ifdef HAVE_SIGINTERRUPT
3657c27ea2fd Issue 1089358. Adds the siginterrupt() function, that is just a
Facundo Batista <facundobatista@gmail.com>
parents: 44355
diff changeset
366 PyDoc_STRVAR(siginterrupt_doc,
3657c27ea2fd Issue 1089358. Adds the siginterrupt() function, that is just a
Facundo Batista <facundobatista@gmail.com>
parents: 44355
diff changeset
367 "siginterrupt(sig, flag) -> None\n\
3657c27ea2fd Issue 1089358. Adds the siginterrupt() function, that is just a
Facundo Batista <facundobatista@gmail.com>
parents: 44355
diff changeset
368 change system call restart behaviour: if flag is False, system calls\n\
3657c27ea2fd Issue 1089358. Adds the siginterrupt() function, that is just a
Facundo Batista <facundobatista@gmail.com>
parents: 44355
diff changeset
369 will be restarted when interrupted by signal sig, else system calls\n\
3657c27ea2fd Issue 1089358. Adds the siginterrupt() function, that is just a
Facundo Batista <facundobatista@gmail.com>
parents: 44355
diff changeset
370 will be interrupted.");
3657c27ea2fd Issue 1089358. Adds the siginterrupt() function, that is just a
Facundo Batista <facundobatista@gmail.com>
parents: 44355
diff changeset
371
3657c27ea2fd Issue 1089358. Adds the siginterrupt() function, that is just a
Facundo Batista <facundobatista@gmail.com>
parents: 44355
diff changeset
372 static PyObject *
3657c27ea2fd Issue 1089358. Adds the siginterrupt() function, that is just a
Facundo Batista <facundobatista@gmail.com>
parents: 44355
diff changeset
373 signal_siginterrupt(PyObject *self, PyObject *args)
3657c27ea2fd Issue 1089358. Adds the siginterrupt() function, that is just a
Facundo Batista <facundobatista@gmail.com>
parents: 44355
diff changeset
374 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
375 int sig_num;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
376 int flag;
45452
3657c27ea2fd Issue 1089358. Adds the siginterrupt() function, that is just a
Facundo Batista <facundobatista@gmail.com>
parents: 44355
diff changeset
377
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
378 if (!PyArg_ParseTuple(args, "ii:siginterrupt", &sig_num, &flag))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
379 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
380 if (sig_num < 1 || sig_num >= NSIG) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
381 PyErr_SetString(PyExc_ValueError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
382 "signal number out of range");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
383 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
384 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
385 if (siginterrupt(sig_num, flag)<0) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
386 PyErr_SetFromErrno(PyExc_RuntimeError);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
387 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
388 }
45452
3657c27ea2fd Issue 1089358. Adds the siginterrupt() function, that is just a
Facundo Batista <facundobatista@gmail.com>
parents: 44355
diff changeset
389
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
390 Py_INCREF(Py_None);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
391 return Py_None;
45452
3657c27ea2fd Issue 1089358. Adds the siginterrupt() function, that is just a
Facundo Batista <facundobatista@gmail.com>
parents: 44355
diff changeset
392 }
3657c27ea2fd Issue 1089358. Adds the siginterrupt() function, that is just a
Facundo Batista <facundobatista@gmail.com>
parents: 44355
diff changeset
393
3657c27ea2fd Issue 1089358. Adds the siginterrupt() function, that is just a
Facundo Batista <facundobatista@gmail.com>
parents: 44355
diff changeset
394 #endif
14638
2e170c2f61e1 Use typedef PyOS_sighandler_t and APIs PyOS_getsig() and
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
395
44355
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
396 static PyObject *
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
397 signal_set_wakeup_fd(PyObject *self, PyObject *args)
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
398 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
399 struct stat buf;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
400 int fd, old_fd;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
401 if (!PyArg_ParseTuple(args, "i:set_wakeup_fd", &fd))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
402 return NULL;
44355
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
403 #ifdef WITH_THREAD
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
404 if (PyThread_get_thread_ident() != main_thread) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
405 PyErr_SetString(PyExc_ValueError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
406 "set_wakeup_fd only works in main thread");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
407 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
408 }
44355
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
409 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
410 if (fd != -1 && fstat(fd, &buf) != 0) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
411 PyErr_SetString(PyExc_ValueError, "invalid fd");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
412 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
413 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
414 old_fd = wakeup_fd;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
415 wakeup_fd = fd;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
416 return PyLong_FromLong(old_fd);
44355
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
417 }
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
418
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
419 PyDoc_STRVAR(set_wakeup_fd_doc,
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
420 "set_wakeup_fd(fd) -> fd\n\
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
421 \n\
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
422 Sets the fd to be written to (with '\\0') when a signal\n\
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
423 comes in. A library can use this to wakeup select or poll.\n\
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
424 The previous fd is returned.\n\
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
425 \n\
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
426 The fd must be non-blocking.");
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
427
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
428 /* C API for the same, without all the error checking */
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
429 int
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
430 PySignal_SetWakeupFd(int fd)
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
431 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
432 int old_fd = wakeup_fd;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
433 if (fd < 0)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
434 fd = -1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
435 wakeup_fd = fd;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
436 return old_fd;
44355
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
437 }
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
438
b89b0334372b Patch #1583 by Adam Olsen.
Guido van Rossum <guido@python.org>
parents: 44264
diff changeset
439
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
440 #ifdef HAVE_SETITIMER
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
441 static PyObject *
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
442 signal_setitimer(PyObject *self, PyObject *args)
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
443 {
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
444 double first;
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
445 double interval = 0;
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
446 int which;
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
447 struct itimerval new, old;
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
448
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
449 if(!PyArg_ParseTuple(args, "id|d:setitimer", &which, &first, &interval))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
450 return NULL;
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
451
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
452 timeval_from_double(first, &new.it_value);
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
453 timeval_from_double(interval, &new.it_interval);
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
454 /* Let OS check "which" value */
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
455 if (setitimer(which, &new, &old) != 0) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
456 PyErr_SetFromErrno(ItimerError);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
457 return NULL;
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
458 }
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
459
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
460 return itimer_retval(&old);
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
461 }
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
462
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
463 PyDoc_STRVAR(setitimer_doc,
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
464 "setitimer(which, seconds[, interval])\n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
465 \n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
466 Sets given itimer (one of ITIMER_REAL, ITIMER_VIRTUAL\n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
467 or ITIMER_PROF) to fire after value seconds and after\n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
468 that every interval seconds.\n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
469 The itimer can be cleared by setting seconds to zero.\n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
470 \n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
471 Returns old values as a tuple: (delay, interval).");
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
472 #endif
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
473
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
474
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
475 #ifdef HAVE_GETITIMER
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
476 static PyObject *
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
477 signal_getitimer(PyObject *self, PyObject *args)
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
478 {
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
479 int which;
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
480 struct itimerval old;
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
481
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
482 if (!PyArg_ParseTuple(args, "i:getitimer", &which))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
483 return NULL;
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
484
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
485 if (getitimer(which, &old) != 0) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
486 PyErr_SetFromErrno(ItimerError);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
487 return NULL;
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
488 }
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
489
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
490 return itimer_retval(&old);
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
491 }
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
492
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
493 PyDoc_STRVAR(getitimer_doc,
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
494 "getitimer(which)\n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
495 \n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
496 Returns current value of given itimer.");
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
497 #endif
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
498
14638
2e170c2f61e1 Use typedef PyOS_sighandler_t and APIs PyOS_getsig() and
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
499
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
500 /* List of functions defined in the module */
4863
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
501 static PyMethodDef signal_methods[] = {
6142
144db635b49d Added configuration tests for presence of alarm(), pause(), and getpwent()
Guido van Rossum <guido@python.org>
parents: 5923
diff changeset
502 #ifdef HAVE_ALARM
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
503 {"alarm", signal_alarm, METH_VARARGS, alarm_doc},
2521
e7d480cf16ba added PyErr_SetInterrupt(); NT ifdefs
Guido van Rossum <guido@python.org>
parents: 2211
diff changeset
504 #endif
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
505 #ifdef HAVE_SETITIMER
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
506 {"setitimer", signal_setitimer, METH_VARARGS, setitimer_doc},
2521
e7d480cf16ba added PyErr_SetInterrupt(); NT ifdefs
Guido van Rossum <guido@python.org>
parents: 2211
diff changeset
507 #endif
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
508 #ifdef HAVE_GETITIMER
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
509 {"getitimer", signal_getitimer, METH_VARARGS, getitimer_doc},
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
510 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
511 {"signal", signal_signal, METH_VARARGS, signal_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
512 {"getsignal", signal_getsignal, METH_VARARGS, getsignal_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
513 {"set_wakeup_fd", signal_set_wakeup_fd, METH_VARARGS, set_wakeup_fd_doc},
45452
3657c27ea2fd Issue 1089358. Adds the siginterrupt() function, that is just a
Facundo Batista <facundobatista@gmail.com>
parents: 44355
diff changeset
514 #ifdef HAVE_SIGINTERRUPT
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
515 {"siginterrupt", signal_siginterrupt, METH_VARARGS, siginterrupt_doc},
45452
3657c27ea2fd Issue 1089358. Adds the siginterrupt() function, that is just a
Facundo Batista <facundobatista@gmail.com>
parents: 44355
diff changeset
516 #endif
6142
144db635b49d Added configuration tests for presence of alarm(), pause(), and getpwent()
Guido van Rossum <guido@python.org>
parents: 5923
diff changeset
517 #ifdef HAVE_PAUSE
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
518 {"pause", (PyCFunction)signal_pause,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
519 METH_NOARGS,pause_doc},
2521
e7d480cf16ba added PyErr_SetInterrupt(); NT ifdefs
Guido van Rossum <guido@python.org>
parents: 2211
diff changeset
520 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
521 {"default_int_handler", signal_default_int_handler,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
522 METH_VARARGS, default_int_handler_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
523 {NULL, NULL} /* sentinel */
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
524 };
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
525
4863
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
526
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23550
diff changeset
527 PyDoc_STRVAR(module_doc,
8570
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
528 "This module provides mechanisms to use signal handlers in Python.\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
529 \n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
530 Functions:\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
531 \n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
532 alarm() -- cause SIGALRM after a specified time [Unix only]\n\
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
533 setitimer() -- cause a signal (described below) after a specified\n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
534 float time and the timer may restart then [Unix only]\n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
535 getitimer() -- get current value of timer [Unix only]\n\
8570
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
536 signal() -- set the action for a given signal\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
537 getsignal() -- get the signal action for a given signal\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
538 pause() -- wait until a signal arrives [Unix only]\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
539 default_int_handler() -- default SIGINT handler\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
540 \n\
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
541 signal constants:\n\
8570
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
542 SIG_DFL -- used to refer to the system default handler\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
543 SIG_IGN -- used to ignore the signal\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
544 NSIG -- number of defined signals\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
545 SIGINT, SIGTERM, etc. -- signal numbers\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
546 \n\
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
547 itimer constants:\n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
548 ITIMER_REAL -- decrements in real time, and delivers SIGALRM upon\n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
549 expiration\n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
550 ITIMER_VIRTUAL -- decrements only when the process is executing,\n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
551 and delivers SIGVTALRM upon expiration\n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
552 ITIMER_PROF -- decrements both when the process is executing and\n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
553 when the system is executing on behalf of the process.\n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
554 Coupled with ITIMER_VIRTUAL, this timer is usually\n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
555 used to profile the time spent by the application\n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
556 in user and kernel space. SIGPROF is delivered upon\n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
557 expiration.\n\
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
558 \n\n\
8570
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
559 *** IMPORTANT NOTICE ***\n\
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
560 A signal handler function is called with two arguments:\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23550
diff changeset
561 the first is the signal number, the second is the interrupted stack frame.");
8570
bd695de18ecf Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8210
diff changeset
562
24471
f66b3a3509c7 Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype
Mark Hammond <mhammond@skippinet.com.au>
parents: 24071
diff changeset
563 PyMODINIT_FUNC
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13500
diff changeset
564 initsignal(void)
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
565 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
566 PyObject *m, *d, *x;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
567 int i;
1678
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
568
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
569 #ifdef WITH_THREAD
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
570 main_thread = PyThread_get_thread_ident();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
571 main_pid = getpid();
1678
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
572 #endif
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
573
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
574 /* Create the module and add the functions */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
575 m = Py_InitModule3("signal", signal_methods, module_doc);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
576 if (m == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
577 return;
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
578
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
579 /* Add some symbolic constants to the module */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
580 d = PyModule_GetDict(m);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
581
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
582 x = DefaultHandler = PyLong_FromVoidPtr((void *)SIG_DFL);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
583 if (!x || PyDict_SetItemString(d, "SIG_DFL", x) < 0)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
584 goto finally;
4863
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
585
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
586 x = IgnoreHandler = PyLong_FromVoidPtr((void *)SIG_IGN);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
587 if (!x || PyDict_SetItemString(d, "SIG_IGN", x) < 0)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
588 goto finally;
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
589
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
590 x = PyInt_FromLong((long)NSIG);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
591 if (!x || PyDict_SetItemString(d, "NSIG", x) < 0)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
592 goto finally;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
593 Py_DECREF(x);
4863
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
594
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
595 x = IntHandler = PyDict_GetItemString(d, "default_int_handler");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
596 if (!x)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
597 goto finally;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
598 Py_INCREF(IntHandler);
4863
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
599
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
600 Handlers[0].tripped = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
601 for (i = 1; i < NSIG; i++) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
602 void (*t)(int);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
603 t = PyOS_getsig(i);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
604 Handlers[i].tripped = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
605 if (t == SIG_DFL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
606 Handlers[i].func = DefaultHandler;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
607 else if (t == SIG_IGN)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
608 Handlers[i].func = IgnoreHandler;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
609 else
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
610 Handlers[i].func = Py_None; /* None of our business */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
611 Py_INCREF(Handlers[i].func);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
612 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
613 if (Handlers[SIGINT].func == DefaultHandler) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
614 /* Install default int handler */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
615 Py_INCREF(IntHandler);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
616 Py_DECREF(Handlers[SIGINT].func);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
617 Handlers[SIGINT].func = IntHandler;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
618 old_siginthandler = PyOS_setsig(SIGINT, signal_handler);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
619 }
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
620
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
621 #ifdef SIGHUP
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
622 x = PyInt_FromLong(SIGHUP);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
623 PyDict_SetItemString(d, "SIGHUP", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
624 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
625 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
626 #ifdef SIGINT
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
627 x = PyInt_FromLong(SIGINT);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
628 PyDict_SetItemString(d, "SIGINT", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
629 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
630 #endif
20207
e2da9a929aca SF patch [#466877] SIGBREAK is missing from signal module.
Tim Peters <tim.peters@gmail.com>
parents: 18754
diff changeset
631 #ifdef SIGBREAK
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
632 x = PyInt_FromLong(SIGBREAK);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
633 PyDict_SetItemString(d, "SIGBREAK", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
634 Py_XDECREF(x);
20207
e2da9a929aca SF patch [#466877] SIGBREAK is missing from signal module.
Tim Peters <tim.peters@gmail.com>
parents: 18754
diff changeset
635 #endif
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
636 #ifdef SIGQUIT
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
637 x = PyInt_FromLong(SIGQUIT);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
638 PyDict_SetItemString(d, "SIGQUIT", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
639 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
640 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
641 #ifdef SIGILL
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
642 x = PyInt_FromLong(SIGILL);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
643 PyDict_SetItemString(d, "SIGILL", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
644 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
645 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
646 #ifdef SIGTRAP
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
647 x = PyInt_FromLong(SIGTRAP);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
648 PyDict_SetItemString(d, "SIGTRAP", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
649 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
650 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
651 #ifdef SIGIOT
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
652 x = PyInt_FromLong(SIGIOT);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
653 PyDict_SetItemString(d, "SIGIOT", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
654 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
655 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
656 #ifdef SIGABRT
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
657 x = PyInt_FromLong(SIGABRT);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
658 PyDict_SetItemString(d, "SIGABRT", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
659 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
660 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
661 #ifdef SIGEMT
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
662 x = PyInt_FromLong(SIGEMT);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
663 PyDict_SetItemString(d, "SIGEMT", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
664 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
665 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
666 #ifdef SIGFPE
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
667 x = PyInt_FromLong(SIGFPE);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
668 PyDict_SetItemString(d, "SIGFPE", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
669 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
670 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
671 #ifdef SIGKILL
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
672 x = PyInt_FromLong(SIGKILL);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
673 PyDict_SetItemString(d, "SIGKILL", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
674 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
675 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
676 #ifdef SIGBUS
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
677 x = PyInt_FromLong(SIGBUS);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
678 PyDict_SetItemString(d, "SIGBUS", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
679 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
680 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
681 #ifdef SIGSEGV
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
682 x = PyInt_FromLong(SIGSEGV);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
683 PyDict_SetItemString(d, "SIGSEGV", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
684 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
685 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
686 #ifdef SIGSYS
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
687 x = PyInt_FromLong(SIGSYS);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
688 PyDict_SetItemString(d, "SIGSYS", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
689 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
690 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
691 #ifdef SIGPIPE
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
692 x = PyInt_FromLong(SIGPIPE);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
693 PyDict_SetItemString(d, "SIGPIPE", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
694 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
695 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
696 #ifdef SIGALRM
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
697 x = PyInt_FromLong(SIGALRM);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
698 PyDict_SetItemString(d, "SIGALRM", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
699 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
700 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
701 #ifdef SIGTERM
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
702 x = PyInt_FromLong(SIGTERM);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
703 PyDict_SetItemString(d, "SIGTERM", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
704 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
705 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
706 #ifdef SIGUSR1
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
707 x = PyInt_FromLong(SIGUSR1);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
708 PyDict_SetItemString(d, "SIGUSR1", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
709 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
710 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
711 #ifdef SIGUSR2
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
712 x = PyInt_FromLong(SIGUSR2);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
713 PyDict_SetItemString(d, "SIGUSR2", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
714 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
715 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
716 #ifdef SIGCLD
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
717 x = PyInt_FromLong(SIGCLD);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
718 PyDict_SetItemString(d, "SIGCLD", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
719 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
720 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
721 #ifdef SIGCHLD
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
722 x = PyInt_FromLong(SIGCHLD);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
723 PyDict_SetItemString(d, "SIGCHLD", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
724 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
725 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
726 #ifdef SIGPWR
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
727 x = PyInt_FromLong(SIGPWR);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
728 PyDict_SetItemString(d, "SIGPWR", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
729 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
730 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
731 #ifdef SIGIO
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
732 x = PyInt_FromLong(SIGIO);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
733 PyDict_SetItemString(d, "SIGIO", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
734 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
735 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
736 #ifdef SIGURG
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
737 x = PyInt_FromLong(SIGURG);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
738 PyDict_SetItemString(d, "SIGURG", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
739 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
740 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
741 #ifdef SIGWINCH
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
742 x = PyInt_FromLong(SIGWINCH);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
743 PyDict_SetItemString(d, "SIGWINCH", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
744 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
745 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
746 #ifdef SIGPOLL
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
747 x = PyInt_FromLong(SIGPOLL);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
748 PyDict_SetItemString(d, "SIGPOLL", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
749 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
750 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
751 #ifdef SIGSTOP
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
752 x = PyInt_FromLong(SIGSTOP);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
753 PyDict_SetItemString(d, "SIGSTOP", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
754 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
755 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
756 #ifdef SIGTSTP
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
757 x = PyInt_FromLong(SIGTSTP);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
758 PyDict_SetItemString(d, "SIGTSTP", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
759 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
760 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
761 #ifdef SIGCONT
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
762 x = PyInt_FromLong(SIGCONT);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
763 PyDict_SetItemString(d, "SIGCONT", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
764 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
765 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
766 #ifdef SIGTTIN
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
767 x = PyInt_FromLong(SIGTTIN);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
768 PyDict_SetItemString(d, "SIGTTIN", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
769 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
770 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
771 #ifdef SIGTTOU
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
772 x = PyInt_FromLong(SIGTTOU);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
773 PyDict_SetItemString(d, "SIGTTOU", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
774 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
775 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
776 #ifdef SIGVTALRM
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
777 x = PyInt_FromLong(SIGVTALRM);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
778 PyDict_SetItemString(d, "SIGVTALRM", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
779 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
780 #endif
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
781 #ifdef SIGPROF
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
782 x = PyInt_FromLong(SIGPROF);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
783 PyDict_SetItemString(d, "SIGPROF", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
784 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
785 #endif
4736
94ad56ef5073 initsignal(): Added SIGXCPU and SIGXFSZ. Left in the definitions for
Barry Warsaw <barry@python.org>
parents: 4600
diff changeset
786 #ifdef SIGXCPU
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
787 x = PyInt_FromLong(SIGXCPU);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
788 PyDict_SetItemString(d, "SIGXCPU", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
789 Py_XDECREF(x);
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
790 #endif
4736
94ad56ef5073 initsignal(): Added SIGXCPU and SIGXFSZ. Left in the definitions for
Barry Warsaw <barry@python.org>
parents: 4600
diff changeset
791 #ifdef SIGXFSZ
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
792 x = PyInt_FromLong(SIGXFSZ);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
793 PyDict_SetItemString(d, "SIGXFSZ", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
794 Py_XDECREF(x);
4736
94ad56ef5073 initsignal(): Added SIGXCPU and SIGXFSZ. Left in the definitions for
Barry Warsaw <barry@python.org>
parents: 4600
diff changeset
795 #endif
30032
677038873a22 Patch [ 776725 ] add SIGRTMIN, SIGRTMAX to signalmodule.c
Anthony Baxter <anthonybaxter@gmail.com>
parents: 28295
diff changeset
796 #ifdef SIGRTMIN
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
797 x = PyInt_FromLong(SIGRTMIN);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
798 PyDict_SetItemString(d, "SIGRTMIN", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
799 Py_XDECREF(x);
30032
677038873a22 Patch [ 776725 ] add SIGRTMIN, SIGRTMAX to signalmodule.c
Anthony Baxter <anthonybaxter@gmail.com>
parents: 28295
diff changeset
800 #endif
677038873a22 Patch [ 776725 ] add SIGRTMIN, SIGRTMAX to signalmodule.c
Anthony Baxter <anthonybaxter@gmail.com>
parents: 28295
diff changeset
801 #ifdef SIGRTMAX
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
802 x = PyInt_FromLong(SIGRTMAX);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
803 PyDict_SetItemString(d, "SIGRTMAX", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
804 Py_XDECREF(x);
30032
677038873a22 Patch [ 776725 ] add SIGRTMIN, SIGRTMAX to signalmodule.c
Anthony Baxter <anthonybaxter@gmail.com>
parents: 28295
diff changeset
805 #endif
21715
4c6c13aa8a99 Export SIGINFO. Fixes #502077.
Martin v. Löwis <martin@v.loewis.de>
parents: 21712
diff changeset
806 #ifdef SIGINFO
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
807 x = PyInt_FromLong(SIGINFO);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
808 PyDict_SetItemString(d, "SIGINFO", x);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
809 Py_XDECREF(x);
21715
4c6c13aa8a99 Export SIGINFO. Fixes #502077.
Martin v. Löwis <martin@v.loewis.de>
parents: 21712
diff changeset
810 #endif
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
811
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
812 #ifdef ITIMER_REAL
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
813 x = PyLong_FromLong(ITIMER_REAL);
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
814 PyDict_SetItemString(d, "ITIMER_REAL", x);
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
815 Py_DECREF(x);
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
816 #endif
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
817 #ifdef ITIMER_VIRTUAL
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
818 x = PyLong_FromLong(ITIMER_VIRTUAL);
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
819 PyDict_SetItemString(d, "ITIMER_VIRTUAL", x);
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
820 Py_DECREF(x);
21715
4c6c13aa8a99 Export SIGINFO. Fixes #502077.
Martin v. Löwis <martin@v.loewis.de>
parents: 21712
diff changeset
821 #endif
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
822 #ifdef ITIMER_PROF
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
823 x = PyLong_FromLong(ITIMER_PROF);
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
824 PyDict_SetItemString(d, "ITIMER_PROF", x);
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
825 Py_DECREF(x);
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
826 #endif
4863
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
827
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
828 #if defined (HAVE_SETITIMER) || defined (HAVE_GETITIMER)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
829 ItimerError = PyErr_NewException("signal.ItimerError",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
830 PyExc_IOError, NULL);
48847
Neal Norwitz <nnorwitz@gmail.com>
parents: 47664
diff changeset
831 if (ItimerError != NULL)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
832 PyDict_SetItemString(d, "ItimerError", ItimerError);
46053
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
833 #endif
461ff43e74d0 Patch #2240: Implement signal.setitimer and signal.getitimer.
Martin v. Löwis <martin@v.loewis.de>
parents: 45452
diff changeset
834
60197
0ab89e8bdedc Implement #1220212. Add os.kill support for Windows.
Brian Curtin <brian.curtin@gmail.com>
parents: 59040
diff changeset
835 #ifdef CTRL_C_EVENT
0ab89e8bdedc Implement #1220212. Add os.kill support for Windows.
Brian Curtin <brian.curtin@gmail.com>
parents: 59040
diff changeset
836 x = PyInt_FromLong(CTRL_C_EVENT);
0ab89e8bdedc Implement #1220212. Add os.kill support for Windows.
Brian Curtin <brian.curtin@gmail.com>
parents: 59040
diff changeset
837 PyDict_SetItemString(d, "CTRL_C_EVENT", x);
0ab89e8bdedc Implement #1220212. Add os.kill support for Windows.
Brian Curtin <brian.curtin@gmail.com>
parents: 59040
diff changeset
838 Py_DECREF(x);
0ab89e8bdedc Implement #1220212. Add os.kill support for Windows.
Brian Curtin <brian.curtin@gmail.com>
parents: 59040
diff changeset
839 #endif
0ab89e8bdedc Implement #1220212. Add os.kill support for Windows.
Brian Curtin <brian.curtin@gmail.com>
parents: 59040
diff changeset
840
0ab89e8bdedc Implement #1220212. Add os.kill support for Windows.
Brian Curtin <brian.curtin@gmail.com>
parents: 59040
diff changeset
841 #ifdef CTRL_BREAK_EVENT
0ab89e8bdedc Implement #1220212. Add os.kill support for Windows.
Brian Curtin <brian.curtin@gmail.com>
parents: 59040
diff changeset
842 x = PyInt_FromLong(CTRL_BREAK_EVENT);
0ab89e8bdedc Implement #1220212. Add os.kill support for Windows.
Brian Curtin <brian.curtin@gmail.com>
parents: 59040
diff changeset
843 PyDict_SetItemString(d, "CTRL_BREAK_EVENT", x);
0ab89e8bdedc Implement #1220212. Add os.kill support for Windows.
Brian Curtin <brian.curtin@gmail.com>
parents: 59040
diff changeset
844 Py_DECREF(x);
0ab89e8bdedc Implement #1220212. Add os.kill support for Windows.
Brian Curtin <brian.curtin@gmail.com>
parents: 59040
diff changeset
845 #endif
0ab89e8bdedc Implement #1220212. Add os.kill support for Windows.
Brian Curtin <brian.curtin@gmail.com>
parents: 59040
diff changeset
846
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
847 if (!PyErr_Occurred())
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
848 return;
4863
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
849
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
850 /* Check for errors */
4863
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
851 finally:
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
852 return;
5923
3e158e69ac5d Add finialization routines; fixed some memory leaks related to this.
Guido van Rossum <guido@python.org>
parents: 5730
diff changeset
853 }
3e158e69ac5d Add finialization routines; fixed some memory leaks related to this.
Guido van Rossum <guido@python.org>
parents: 5730
diff changeset
854
3e158e69ac5d Add finialization routines; fixed some memory leaks related to this.
Guido van Rossum <guido@python.org>
parents: 5730
diff changeset
855 static void
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13500
diff changeset
856 finisignal(void)
5923
3e158e69ac5d Add finialization routines; fixed some memory leaks related to this.
Guido van Rossum <guido@python.org>
parents: 5730
diff changeset
857 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
858 int i;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
859 PyObject *func;
5923
3e158e69ac5d Add finialization routines; fixed some memory leaks related to this.
Guido van Rossum <guido@python.org>
parents: 5730
diff changeset
860
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
861 PyOS_setsig(SIGINT, old_siginthandler);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
862 old_siginthandler = SIG_DFL;
5923
3e158e69ac5d Add finialization routines; fixed some memory leaks related to this.
Guido van Rossum <guido@python.org>
parents: 5730
diff changeset
863
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
864 for (i = 1; i < NSIG; i++) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
865 func = Handlers[i].func;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
866 Handlers[i].tripped = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
867 Handlers[i].func = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
868 if (i != SIGINT && func != NULL && func != Py_None &&
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
869 func != DefaultHandler && func != IgnoreHandler)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
870 PyOS_setsig(i, SIG_DFL);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
871 Py_XDECREF(func);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
872 }
5923
3e158e69ac5d Add finialization routines; fixed some memory leaks related to this.
Guido van Rossum <guido@python.org>
parents: 5730
diff changeset
873
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
874 Py_XDECREF(IntHandler);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
875 IntHandler = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
876 Py_XDECREF(DefaultHandler);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
877 DefaultHandler = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
878 Py_XDECREF(IgnoreHandler);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
879 IgnoreHandler = NULL;
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
880 }
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
881
4863
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
882
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
883 /* Declared in pyerrors.h */
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
884 int
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13500
diff changeset
885 PyErr_CheckSignals(void)
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
886 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
887 int i;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
888 PyObject *f;
4863
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
889
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
890 if (!is_tripped)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
891 return 0;
44264
a4aab72c2cc0 Backport patch #1643738.
Guido van Rossum <guido@python.org>
parents: 36324
diff changeset
892
1678
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
893 #ifdef WITH_THREAD
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
894 if (PyThread_get_thread_ident() != main_thread)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
895 return 0;
1678
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
896 #endif
44264
a4aab72c2cc0 Backport patch #1643738.
Guido van Rossum <guido@python.org>
parents: 36324
diff changeset
897
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
898 /*
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61441
diff changeset
899 * The is_tripped variable is meant to speed up the calls to
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
900 * PyErr_CheckSignals (both directly or via pending calls) when no
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
901 * signal has arrived. This variable is set to 1 when a signal arrives
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
902 * and it is set to 0 here, when we know some signals arrived. This way
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
903 * we can run the registered handlers with no signals blocked.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
904 *
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
905 * NOTE: with this approach we can have a situation where is_tripped is
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
906 * 1 but we have no more signals to handle (Handlers[i].tripped
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
907 * is 0 for every signal i). This won't do us any harm (except
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
908 * we're gonna spent some cycles for nothing). This happens when
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
909 * we receive a signal i after we zero is_tripped and before we
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
910 * check Handlers[i].tripped.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
911 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
912 is_tripped = 0;
44264
a4aab72c2cc0 Backport patch #1643738.
Guido van Rossum <guido@python.org>
parents: 36324
diff changeset
913
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
914 if (!(f = (PyObject *)PyEval_GetFrame()))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
915 f = Py_None;
44264
a4aab72c2cc0 Backport patch #1643738.
Guido van Rossum <guido@python.org>
parents: 36324
diff changeset
916
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
917 for (i = 1; i < NSIG; i++) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
918 if (Handlers[i].tripped) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
919 PyObject *result = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
920 PyObject *arglist = Py_BuildValue("(iO)", i, f);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
921 Handlers[i].tripped = 0;
4863
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
922
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
923 if (arglist) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
924 result = PyEval_CallObject(Handlers[i].func,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
925 arglist);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
926 Py_DECREF(arglist);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
927 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
928 if (!result)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
929 return -1;
4863
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
930
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
931 Py_DECREF(result);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
932 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
933 }
44264
a4aab72c2cc0 Backport patch #1643738.
Guido van Rossum <guido@python.org>
parents: 36324
diff changeset
934
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
935 return 0;
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
936 }
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
937
14638
2e170c2f61e1 Use typedef PyOS_sighandler_t and APIs PyOS_getsig() and
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
938
4863
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
939 /* Replacements for intrcheck.c functionality
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
940 * Declared in pyerrors.h
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
941 */
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
942 void
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13500
diff changeset
943 PyErr_SetInterrupt(void)
4863
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
944 {
69426
7d355c2ff3d4 (Merge 3.1) Issue #11768: The signal handler of the signal module only calls
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68256
diff changeset
945 trip_signal(SIGINT);
4863
b1707bcdc265 Several changes:
Barry Warsaw <barry@python.org>
parents: 4736
diff changeset
946 }
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
947
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
948 void
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13500
diff changeset
949 PyOS_InitInterrupts(void)
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
950 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
951 initsignal();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
952 _PyImport_FixupExtension("signal", "signal");
5923
3e158e69ac5d Add finialization routines; fixed some memory leaks related to this.
Guido van Rossum <guido@python.org>
parents: 5730
diff changeset
953 }
3e158e69ac5d Add finialization routines; fixed some memory leaks related to this.
Guido van Rossum <guido@python.org>
parents: 5730
diff changeset
954
3e158e69ac5d Add finialization routines; fixed some memory leaks related to this.
Guido van Rossum <guido@python.org>
parents: 5730
diff changeset
955 void
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13500
diff changeset
956 PyOS_FiniInterrupts(void)
5923
3e158e69ac5d Add finialization routines; fixed some memory leaks related to this.
Guido van Rossum <guido@python.org>
parents: 5730
diff changeset
957 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
958 finisignal();
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
959 }
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
960
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
961 int
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13500
diff changeset
962 PyOS_InterruptOccurred(void)
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
963 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
964 if (Handlers[SIGINT].tripped) {
1678
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
965 #ifdef WITH_THREAD
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
966 if (PyThread_get_thread_ident() != main_thread)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
967 return 0;
1678
1f06f71904c2 * Modules/signalmodule.c: added thread compatibility (only main
Guido van Rossum <guido@python.org>
parents: 1658
diff changeset
968 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
969 Handlers[SIGINT].tripped = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
970 return 1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
971 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
972 return 0;
1630
0202a72d994e New experimental modules -- signal and sybase
Guido van Rossum <guido@python.org>
parents:
diff changeset
973 }
6578
01ee5607bb35 This fix (across 4 files in 3 directories) solves a subtle problem with
Guido van Rossum <guido@python.org>
parents: 6546
diff changeset
974
01ee5607bb35 This fix (across 4 files in 3 directories) solves a subtle problem with
Guido van Rossum <guido@python.org>
parents: 6546
diff changeset
975 void
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13500
diff changeset
976 PyOS_AfterFork(void)
6578
01ee5607bb35 This fix (across 4 files in 3 directories) solves a subtle problem with
Guido van Rossum <guido@python.org>
parents: 6546
diff changeset
977 {
01ee5607bb35 This fix (across 4 files in 3 directories) solves a subtle problem with
Guido van Rossum <guido@python.org>
parents: 6546
diff changeset
978 #ifdef WITH_THREAD
74729
c3649173d093 Issue #13817: After fork(), reinit the ad-hoc TLS implementation earlier to fix
Charles-François Natali <neologix@free.fr>
parents: 72897
diff changeset
979 /* PyThread_ReInitTLS() must be called early, to make sure that the TLS API
c3649173d093 Issue #13817: After fork(), reinit the ad-hoc TLS implementation earlier to fix
Charles-François Natali <neologix@free.fr>
parents: 72897
diff changeset
980 * can be called safely. */
c3649173d093 Issue #13817: After fork(), reinit the ad-hoc TLS implementation earlier to fix
Charles-François Natali <neologix@free.fr>
parents: 72897
diff changeset
981 PyThread_ReInitTLS();
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
982 PyEval_ReInitThreads();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
983 main_thread = PyThread_get_thread_ident();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
984 main_pid = getpid();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61445
diff changeset
985 _PyImport_ReInitLock();
6578
01ee5607bb35 This fix (across 4 files in 3 directories) solves a subtle problem with
Guido van Rossum <guido@python.org>
parents: 6546
diff changeset
986 #endif
01ee5607bb35 This fix (across 4 files in 3 directories) solves a subtle problem with
Guido van Rossum <guido@python.org>
parents: 6546
diff changeset
987 }