1 /*------------------------------------------------------------------------- 2 * 3 * procsignal.h 4 * Routines for interprocess signaling 5 * 6 * 7 * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group 8 * Portions Copyright (c) 1994, Regents of the University of California 9 * 10 * src/include/storage/procsignal.h 11 * 12 *------------------------------------------------------------------------- 13 */ 14 #ifndef PROCSIGNAL_H 15 #define PROCSIGNAL_H 16 17 #include "storage/backendid.h" 18 19 20 /* 21 * Reasons for signaling a Postgres child process (a backend or an auxiliary 22 * process, like checkpointer). We can cope with concurrent signals for different 23 * reasons. However, if the same reason is signaled multiple times in quick 24 * succession, the process is likely to observe only one notification of it. 25 * This is okay for the present uses. 26 * 27 * Also, because of race conditions, it's important that all the signals be 28 * defined so that no harm is done if a process mistakenly receives one. 29 */ 30 typedef enum 31 { 32 PROCSIG_CATCHUP_INTERRUPT, /* sinval catchup interrupt */ 33 PROCSIG_NOTIFY_INTERRUPT, /* listen/notify interrupt */ 34 PROCSIG_PARALLEL_MESSAGE, /* message from cooperating parallel backend */ 35 PROCSIG_WALSND_INIT_STOPPING, /* ask walsenders to prepare for shutdown */ 36 PROCSIG_BARRIER, /* global barrier interrupt */ 37 38 /* Recovery conflict reasons */ 39 PROCSIG_RECOVERY_CONFLICT_DATABASE, 40 PROCSIG_RECOVERY_CONFLICT_TABLESPACE, 41 PROCSIG_RECOVERY_CONFLICT_LOCK, 42 PROCSIG_RECOVERY_CONFLICT_SNAPSHOT, 43 PROCSIG_RECOVERY_CONFLICT_BUFFERPIN, 44 PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK, 45 46 NUM_PROCSIGNALS /* Must be last! */ 47 } ProcSignalReason; 48 49 typedef enum 50 { 51 /* 52 * XXX. PROCSIGNAL_BARRIER_PLACEHOLDER should be replaced when the first 53 * real user of the ProcSignalBarrier mechanism is added. It's just here 54 * for now because we can't have an empty enum. 55 */ 56 PROCSIGNAL_BARRIER_PLACEHOLDER = 0 57 } ProcSignalBarrierType; 58 59 /* 60 * prototypes for functions in procsignal.c 61 */ 62 extern Size ProcSignalShmemSize(void); 63 extern void ProcSignalShmemInit(void); 64 65 extern void ProcSignalInit(int pss_idx); 66 extern int SendProcSignal(pid_t pid, ProcSignalReason reason, 67 BackendId backendId); 68 69 extern uint64 EmitProcSignalBarrier(ProcSignalBarrierType type); 70 extern void WaitForProcSignalBarrier(uint64 generation); 71 extern void ProcessProcSignalBarrier(void); 72 73 extern void procsignal_sigusr1_handler(SIGNAL_ARGS); 74 75 #endif /* PROCSIGNAL_H */ 76