PostgreSQL Source Code  git master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
pqsignal.c
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * pqsignal.c
4  * Backend signal(2) support (see also src/port/pqsignal.c)
5  *
6  * Portions Copyright (c) 1996-2017, 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,
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 (is this ever nonzero??)
39  */
40 void
42 {
43  sigemptyset(&UnBlockSig);
44 
45  /* First set all signals, then clear some. */
46  sigfillset(&BlockSig);
47  sigfillset(&StartupBlockSig);
48 
49  /*
50  * Unmark those signals that should never be blocked. Some of these signal
51  * names don't exist on all platforms. Most do, but might as well ifdef
52  * them all for consistency...
53  */
54 #ifdef SIGTRAP
55  sigdelset(&BlockSig, SIGTRAP);
56  sigdelset(&StartupBlockSig, SIGTRAP);
57 #endif
58 #ifdef SIGABRT
59  sigdelset(&BlockSig, SIGABRT);
60  sigdelset(&StartupBlockSig, SIGABRT);
61 #endif
62 #ifdef SIGILL
63  sigdelset(&BlockSig, SIGILL);
64  sigdelset(&StartupBlockSig, SIGILL);
65 #endif
66 #ifdef SIGFPE
67  sigdelset(&BlockSig, SIGFPE);
68  sigdelset(&StartupBlockSig, SIGFPE);
69 #endif
70 #ifdef SIGSEGV
71  sigdelset(&BlockSig, SIGSEGV);
72  sigdelset(&StartupBlockSig, SIGSEGV);
73 #endif
74 #ifdef SIGBUS
75  sigdelset(&BlockSig, SIGBUS);
76  sigdelset(&StartupBlockSig, SIGBUS);
77 #endif
78 #ifdef SIGSYS
79  sigdelset(&BlockSig, SIGSYS);
80  sigdelset(&StartupBlockSig, SIGSYS);
81 #endif
82 #ifdef SIGCONT
83  sigdelset(&BlockSig, SIGCONT);
84  sigdelset(&StartupBlockSig, SIGCONT);
85 #endif
86 
87 /* Signals unique to startup */
88 #ifdef SIGQUIT
89  sigdelset(&StartupBlockSig, SIGQUIT);
90 #endif
91 #ifdef SIGTERM
92  sigdelset(&StartupBlockSig, SIGTERM);
93 #endif
94 #ifdef SIGALRM
95  sigdelset(&StartupBlockSig, SIGALRM);
96 #endif
97 }
#define SIGCONT
Definition: win32.h:197
#define SIGQUIT
Definition: win32.h:189
void pqinitmask(void)
Definition: pqsignal.c:41
sigset_t UnBlockSig
Definition: pqsignal.c:22
sigset_t BlockSig
Definition: pqsignal.c:22
sigset_t StartupBlockSig
Definition: pqsignal.c:22
#define SIGTRAP
Definition: win32.h:190
#define SIGABRT
Definition: win32.h:191
#define SIGALRM
Definition: win32.h:194