1 /*-------------------------------------------------------------------------
4 * Routines for interprocess signaling
7 * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
10 * src/include/storage/procsignal.h
12 *-------------------------------------------------------------------------
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.
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! */
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
,
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 */