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