Age Owner 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-2023, 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
8320 tgl 41 CBC 1857 : pqinitmask(void)
42 : {
43 1857 : sigemptyset(&UnBlockSig);
44 :
45 : /* Note: InitializeLatchSupport() modifies UnBlockSig. */
46 :
47 : /* First set all signals, then clear some. */
48 1857 : sigfillset(&BlockSig);
4971 49 1857 : 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
8319 57 1857 : sigdelset(&BlockSig, SIGTRAP);
4971 58 1857 : sigdelset(&StartupBlockSig, SIGTRAP);
59 : #endif
60 : #ifdef SIGABRT
8320 61 1857 : sigdelset(&BlockSig, SIGABRT);
4971 62 1857 : sigdelset(&StartupBlockSig, SIGABRT);
63 : #endif
64 : #ifdef SIGILL
8320 65 1857 : sigdelset(&BlockSig, SIGILL);
4971 66 1857 : sigdelset(&StartupBlockSig, SIGILL);
67 : #endif
68 : #ifdef SIGFPE
8319 69 1857 : sigdelset(&BlockSig, SIGFPE);
4971 70 1857 : sigdelset(&StartupBlockSig, SIGFPE);
71 : #endif
72 : #ifdef SIGSEGV
8320 73 1857 : sigdelset(&BlockSig, SIGSEGV);
4971 74 1857 : sigdelset(&StartupBlockSig, SIGSEGV);
75 : #endif
76 : #ifdef SIGBUS
8320 77 1857 : sigdelset(&BlockSig, SIGBUS);
4971 78 1857 : sigdelset(&StartupBlockSig, SIGBUS);
79 : #endif
80 : #ifdef SIGSYS
8320 81 1857 : sigdelset(&BlockSig, SIGSYS);
4971 82 1857 : sigdelset(&StartupBlockSig, SIGSYS);
83 : #endif
84 : #ifdef SIGCONT
8319 85 1857 : sigdelset(&BlockSig, SIGCONT);
4971 86 1857 : sigdelset(&StartupBlockSig, SIGCONT);
87 : #endif
88 :
89 : /* Signals unique to startup */
90 : #ifdef SIGQUIT
91 1857 : sigdelset(&StartupBlockSig, SIGQUIT);
92 : #endif
93 : #ifdef SIGTERM
94 1857 : sigdelset(&StartupBlockSig, SIGTERM);
95 : #endif
96 : #ifdef SIGALRM
97 1857 : sigdelset(&StartupBlockSig, SIGALRM);
98 : #endif
8320 99 1857 : }
|