1/*-------------------------------------------------------------------------
2 *
3 * procsignal.h
4 * Routines for interprocess signalling
5 *
6 *
7 * Portions Copyright (c) 1996-2019, 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 signalling 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 */
30typedef 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
37 /* Recovery conflict reasons */
38 PROCSIG_RECOVERY_CONFLICT_DATABASE,
39 PROCSIG_RECOVERY_CONFLICT_TABLESPACE,
40 PROCSIG_RECOVERY_CONFLICT_LOCK,
41 PROCSIG_RECOVERY_CONFLICT_SNAPSHOT,
42 PROCSIG_RECOVERY_CONFLICT_BUFFERPIN,
43 PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK,
44
45 NUM_PROCSIGNALS /* Must be last! */
46} ProcSignalReason;
47
48/*
49 * prototypes for functions in procsignal.c
50 */
51extern Size ProcSignalShmemSize(void);
52extern void ProcSignalShmemInit(void);
53
54extern void ProcSignalInit(int pss_idx);
55extern int SendProcSignal(pid_t pid, ProcSignalReason reason,
56 BackendId backendId);
57
58extern void procsignal_sigusr1_handler(SIGNAL_ARGS);
59
60#endif /* PROCSIGNAL_H */
61