Update copyright for 2022
[pgsql.git] / src / include / storage / procsignal.h
bloba121e650665687bf86fbade521ec045eac80cc23
1 /*-------------------------------------------------------------------------
3 * procsignal.h
4 * Routines for interprocess signaling
7 * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
10 * src/include/storage/procsignal.h
12 *-------------------------------------------------------------------------
14 #ifndef PROCSIGNAL_H
15 #define PROCSIGNAL_H
17 #include "storage/backendid.h"
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.
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.
30 typedef enum
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 PROCSIG_LOG_MEMORY_CONTEXT, /* ask backend to log the memory contexts */
39 /* Recovery conflict reasons */
40 PROCSIG_RECOVERY_CONFLICT_DATABASE,
41 PROCSIG_RECOVERY_CONFLICT_TABLESPACE,
42 PROCSIG_RECOVERY_CONFLICT_LOCK,
43 PROCSIG_RECOVERY_CONFLICT_SNAPSHOT,
44 PROCSIG_RECOVERY_CONFLICT_BUFFERPIN,
45 PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK,
47 NUM_PROCSIGNALS /* Must be last! */
48 } ProcSignalReason;
50 typedef enum
53 * XXX. PROCSIGNAL_BARRIER_PLACEHOLDER should be replaced when the first
54 * real user of the ProcSignalBarrier mechanism is added. It's just here
55 * for now because we can't have an empty enum.
57 PROCSIGNAL_BARRIER_PLACEHOLDER = 0
58 } ProcSignalBarrierType;
61 * prototypes for functions in procsignal.c
63 extern Size ProcSignalShmemSize(void);
64 extern void ProcSignalShmemInit(void);
66 extern void ProcSignalInit(int pss_idx);
67 extern int SendProcSignal(pid_t pid, ProcSignalReason reason,
68 BackendId backendId);
70 extern uint64 EmitProcSignalBarrier(ProcSignalBarrierType type);
71 extern void WaitForProcSignalBarrier(uint64 generation);
72 extern void ProcessProcSignalBarrier(void);
74 extern void procsignal_sigusr1_handler(SIGNAL_ARGS);
76 #endif /* PROCSIGNAL_H */