20#ifdef HAVE_SYS_PRCTL_H
66#define PM_CHILD_UNUSED 0
67#define PM_CHILD_ASSIGNED 1
68#define PM_CHILD_ACTIVE 2
69#define PM_CHILD_WALSENDER 3
96#ifdef USE_POSTMASTER_DEATH_SIGNAL
97volatile sig_atomic_t postmaster_possibly_dead =
false;
102 postmaster_possibly_dead =
true;
114#define POSTMASTER_DEATH_SIGNAL SIGINFO
116#define POSTMASTER_DEATH_SIGNAL SIGPWR
118#error "cannot find a signal to use for postmaster death"
136 sizeof(sig_atomic_t)));
236 elog(
FATAL,
"postmaster child slot is already in use");
348#ifdef USE_POSTMASTER_DEATH_SIGNAL
354 postmaster_possibly_dead =
false;
377#ifdef USE_POSTMASTER_DEATH_SIGNAL
378 postmaster_possibly_dead =
true;
382 elog(
FATAL,
"read on postmaster death monitoring pipe failed: %m");
384 elog(
FATAL,
"unexpected data in postmaster death monitoring pipe");
391 if (WaitForSingleObject(PostmasterHandle, 0) == WAIT_TIMEOUT)
395#ifdef USE_POSTMASTER_DEATH_SIGNAL
396 postmaster_possibly_dead =
true;
409#ifdef USE_POSTMASTER_DEATH_SIGNAL
410 int signum = POSTMASTER_DEATH_SIGNAL;
413 pqsignal(signum, postmaster_death_handler);
416#if defined(PR_SET_PDEATHSIG)
417 if (prctl(PR_SET_PDEATHSIG, signum) < 0)
418 elog(
ERROR,
"could not request parent death signal: %m");
419#elif defined(PROC_PDEATHSIG_CTL)
420 if (procctl(P_PID, 0, PROC_PDEATHSIG_CTL, &signum) < 0)
421 elog(
ERROR,
"could not request parent death signal: %m");
423#error "USE_POSTMASTER_DEATH_SIGNAL set, but there is no mechanism to request the signal"
430 postmaster_possibly_dead =
true;
#define unvolatize(underlying_type, expr)
#define FLEXIBLE_ARRAY_MEMBER
#define MemSet(start, val, len)
Assert(PointerIsAligned(start, uint64))
void on_shmem_exit(pg_on_exit_callback function, Datum arg)
int MaxLivePostmasterChildren(void)
#define PM_CHILD_WALSENDER
Size PMSignalShmemSize(void)
bool CheckPostmasterSignal(PMSignalReason reason)
static void MarkPostmasterChildInactive(int code, Datum arg)
bool PostmasterIsAliveInternal(void)
QuitSignalReason GetQuitSignalReason(void)
void MarkPostmasterChildSlotAssigned(int slot)
void SendPostmasterSignal(PMSignalReason reason)
void SetQuitSignalReason(QuitSignalReason reason)
NON_EXEC_STATIC volatile PMSignalData * PMSignalState
bool MarkPostmasterChildSlotUnassigned(int slot)
void MarkPostmasterChildWalSender(void)
static int num_child_flags
bool IsPostmasterChildWalSender(int slot)
void RegisterPostmasterChildActive(void)
void PostmasterDeathSignalInit(void)
void PMSignalShmemInit(void)
#define PM_CHILD_ASSIGNED
int postmaster_alive_fds[2]
#define POSTMASTER_FD_WATCH
Size add_size(Size s1, Size s2)
Size mul_size(Size s1, Size s2)
void * ShmemInitStruct(const char *name, Size size, bool *foundPtr)
sig_atomic_t PMSignalFlags[NUM_PMSIGNALS]
sig_atomic_t PMChildFlags[FLEXIBLE_ARRAY_MEMBER]
QuitSignalReason sigquit_reason