Age Owner Branch data TLA Line data Source code
1 : : /*-------------------------------------------------------------------------
2 : : *
3 : : * pqsignal.c
4 : : * Backend signal(2) support (see also src/port/pqsignal.c)
5 : : *
6 : : * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
7 : : * Portions Copyright (c) 1994, Regents of the University of California
8 : : *
9 : : *
10 : : * IDENTIFICATION
11 : : * src/backend/libpq/pqsignal.c
12 : : *
13 : : * ------------------------------------------------------------------------
14 : : */
15 : :
16 : : #include "postgres.h"
17 : :
18 : : #include "libpq/pqsignal.h"
19 : :
20 : :
21 : : /* Global variables */
22 : : sigset_t UnBlockSig,
23 : : BlockSig,
24 : : StartupBlockSig;
25 : :
26 : :
27 : : /*
28 : : * Initialize BlockSig, UnBlockSig, and StartupBlockSig.
29 : : *
30 : : * BlockSig is the set of signals to block when we are trying to block
31 : : * signals. This includes all signals we normally expect to get, but NOT
32 : : * signals that should never be turned off.
33 : : *
34 : : * StartupBlockSig is the set of signals to block during startup packet
35 : : * collection; it's essentially BlockSig minus SIGTERM, SIGQUIT, SIGALRM.
36 : : *
37 : : * UnBlockSig is the set of signals to block when we don't want to block
38 : : * signals.
39 : : */
40 : : void
8691 tgl@sss.pgh.pa.us 41 :CBC 928 : pqinitmask(void)
42 : : {
43 : 928 : sigemptyset(&UnBlockSig);
44 : :
45 : : /* Note: InitializeLatchSupport() modifies UnBlockSig. */
46 : :
47 : : /* First set all signals, then clear some. */
48 : 928 : sigfillset(&BlockSig);
5342 49 : 928 : sigfillset(&StartupBlockSig);
50 : :
51 : : /*
52 : : * Unmark those signals that should never be blocked. Some of these signal
53 : : * names don't exist on all platforms. Most do, but might as well ifdef
54 : : * them all for consistency...
55 : : */
56 : : #ifdef SIGTRAP
8690 57 : 928 : sigdelset(&BlockSig, SIGTRAP);
5342 58 : 928 : sigdelset(&StartupBlockSig, SIGTRAP);
59 : : #endif
60 : : #ifdef SIGABRT
8691 61 : 928 : sigdelset(&BlockSig, SIGABRT);
5342 62 : 928 : sigdelset(&StartupBlockSig, SIGABRT);
63 : : #endif
64 : : #ifdef SIGILL
8691 65 : 928 : sigdelset(&BlockSig, SIGILL);
5342 66 : 928 : sigdelset(&StartupBlockSig, SIGILL);
67 : : #endif
68 : : #ifdef SIGFPE
8690 69 : 928 : sigdelset(&BlockSig, SIGFPE);
5342 70 : 928 : sigdelset(&StartupBlockSig, SIGFPE);
71 : : #endif
72 : : #ifdef SIGSEGV
8691 73 : 928 : sigdelset(&BlockSig, SIGSEGV);
5342 74 : 928 : sigdelset(&StartupBlockSig, SIGSEGV);
75 : : #endif
76 : : #ifdef SIGBUS
8691 77 : 928 : sigdelset(&BlockSig, SIGBUS);
5342 78 : 928 : sigdelset(&StartupBlockSig, SIGBUS);
79 : : #endif
80 : : #ifdef SIGSYS
8691 81 : 928 : sigdelset(&BlockSig, SIGSYS);
5342 82 : 928 : sigdelset(&StartupBlockSig, SIGSYS);
83 : : #endif
84 : : #ifdef SIGCONT
8690 85 : 928 : sigdelset(&BlockSig, SIGCONT);
5342 86 : 928 : sigdelset(&StartupBlockSig, SIGCONT);
87 : : #endif
88 : :
89 : : /* Signals unique to startup */
90 : : #ifdef SIGQUIT
91 : 928 : sigdelset(&StartupBlockSig, SIGQUIT);
92 : : #endif
93 : : #ifdef SIGTERM
94 : 928 : sigdelset(&StartupBlockSig, SIGTERM);
95 : : #endif
96 : : #ifdef SIGALRM
97 : 928 : sigdelset(&StartupBlockSig, SIGALRM);
98 : : #endif
8691 99 : 928 : }
|