PostgreSQL Source Code git master
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
procsignal.h
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * procsignal.h
4 * Routines for interprocess signaling
5 *
6 *
7 * Portions Copyright (c) 1996-2025, 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/procnumber.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 */
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 PROCSIG_BARRIER, /* global barrier interrupt */
37 PROCSIG_LOG_MEMORY_CONTEXT, /* ask backend to log the memory contexts */
38 PROCSIG_GET_MEMORY_CONTEXT, /* ask backend to send the memory contexts */
39 PROCSIG_PARALLEL_APPLY_MESSAGE, /* Message from parallel apply workers */
40
41 /* Recovery conflict reasons */
52
53#define NUM_PROCSIGNALS (PROCSIG_RECOVERY_CONFLICT_LAST + 1)
54
55typedef enum
56{
57 PROCSIGNAL_BARRIER_SMGRRELEASE, /* ask smgr to close files */
59
60/*
61 * Length of query cancel keys generated.
62 *
63 * Note that the protocol allows for longer keys, or shorter, but this is the
64 * length we actually generate. Client code, and the server code that handles
65 * incoming cancellation packets from clients, mustn't use this hardcoded
66 * length.
67 */
68#define MAX_CANCEL_KEY_LENGTH 32
69
70/*
71 * prototypes for functions in procsignal.c
72 */
73extern Size ProcSignalShmemSize(void);
74extern void ProcSignalShmemInit(void);
75
76extern void ProcSignalInit(char *cancel_key, int cancel_key_len);
77extern int SendProcSignal(pid_t pid, ProcSignalReason reason,
78 ProcNumber procNumber);
79extern void SendCancelRequest(int backendPID, char *cancel_key, int cancel_key_len);
80
82extern void WaitForProcSignalBarrier(uint64 generation);
83extern void ProcessProcSignalBarrier(void);
84
86
87/* ProcSignalHeader is an opaque struct, details known only within procsignal.c */
89
90#ifdef EXEC_BACKEND
92#endif
93
94#endif /* PROCSIGNAL_H */
#define PGDLLIMPORT
Definition: c.h:1291
#define SIGNAL_ARGS
Definition: c.h:1320
uint64_t uint64
Definition: c.h:503
size_t Size
Definition: c.h:576
int ProcNumber
Definition: procnumber.h:24
NON_EXEC_STATIC ProcSignalHeader * ProcSignal
Definition: procsignal.c:104
int SendProcSignal(pid_t pid, ProcSignalReason reason, ProcNumber procNumber)
Definition: procsignal.c:283
ProcSignalReason
Definition: procsignal.h:31
@ PROCSIG_GET_MEMORY_CONTEXT
Definition: procsignal.h:38
@ PROCSIG_PARALLEL_MESSAGE
Definition: procsignal.h:34
@ PROCSIG_RECOVERY_CONFLICT_BUFFERPIN
Definition: procsignal.h:48
@ PROCSIG_CATCHUP_INTERRUPT
Definition: procsignal.h:32
@ PROCSIG_RECOVERY_CONFLICT_LOCK
Definition: procsignal.h:45
@ PROCSIG_LOG_MEMORY_CONTEXT
Definition: procsignal.h:37
@ PROCSIG_RECOVERY_CONFLICT_LOGICALSLOT
Definition: procsignal.h:47
@ PROCSIG_BARRIER
Definition: procsignal.h:36
@ PROCSIG_RECOVERY_CONFLICT_DATABASE
Definition: procsignal.h:43
@ PROCSIG_WALSND_INIT_STOPPING
Definition: procsignal.h:35
@ PROCSIG_PARALLEL_APPLY_MESSAGE
Definition: procsignal.h:39
@ PROCSIG_RECOVERY_CONFLICT_SNAPSHOT
Definition: procsignal.h:46
@ PROCSIG_RECOVERY_CONFLICT_LAST
Definition: procsignal.h:50
@ PROCSIG_RECOVERY_CONFLICT_FIRST
Definition: procsignal.h:42
@ PROCSIG_NOTIFY_INTERRUPT
Definition: procsignal.h:33
@ PROCSIG_RECOVERY_CONFLICT_TABLESPACE
Definition: procsignal.h:44
@ PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK
Definition: procsignal.h:49
void ProcSignalShmemInit(void)
Definition: procsignal.c:130
void ProcessProcSignalBarrier(void)
Definition: procsignal.c:498
ProcSignalBarrierType
Definition: procsignal.h:56
@ PROCSIGNAL_BARRIER_SMGRRELEASE
Definition: procsignal.h:57
void WaitForProcSignalBarrier(uint64 generation)
Definition: procsignal.c:423
void SendCancelRequest(int backendPID, char *cancel_key, int cancel_key_len)
Definition: procsignal.c:731
uint64 EmitProcSignalBarrier(ProcSignalBarrierType type)
Definition: procsignal.c:355
Size ProcSignalShmemSize(void)
Definition: procsignal.c:116
void procsignal_sigusr1_handler(SIGNAL_ARGS)
Definition: procsignal.c:673
void ProcSignalInit(char *cancel_key, int cancel_key_len)
Definition: procsignal.c:165
const char * type