#ifndef PMSIGNAL_H
#define PMSIGNAL_H
#include <signal.h>
#ifdef HAVE_SYS_PRCTL_H
#include "sys/prctl.h"
#endif
#ifdef HAVE_SYS_PROCCTL_H
#include "sys/procctl.h"
#endif
typedef enum
{
PMSIGNAL_RECOVERY_STARTED,
PMSIGNAL_BEGIN_HOT_STANDBY,
PMSIGNAL_ROTATE_LOGFILE,
PMSIGNAL_START_AUTOVAC_LAUNCHER,
PMSIGNAL_START_AUTOVAC_WORKER,
PMSIGNAL_BACKGROUND_WORKER_CHANGE,
PMSIGNAL_START_WALRECEIVER,
PMSIGNAL_ADVANCE_STATE_MACHINE,
NUM_PMSIGNALS
} PMSignalReason;
typedef enum
{
PMQUIT_NOT_SENT = 0,
PMQUIT_FOR_CRASH,
PMQUIT_FOR_STOP,
} QuitSignalReason;
typedef struct PMSignalData PMSignalData;
extern Size PMSignalShmemSize(void);
extern void PMSignalShmemInit(void);
extern void SendPostmasterSignal(PMSignalReason reason);
extern bool CheckPostmasterSignal(PMSignalReason reason);
extern void SetQuitSignalReason(QuitSignalReason reason);
extern QuitSignalReason GetQuitSignalReason(void);
extern int AssignPostmasterChildSlot(void);
extern bool ReleasePostmasterChildSlot(int slot);
extern bool IsPostmasterChildWalSender(int slot);
extern void MarkPostmasterChildActive(void);
extern void MarkPostmasterChildInactive(void);
extern void MarkPostmasterChildWalSender(void);
extern bool PostmasterIsAliveInternal(void);
extern void PostmasterDeathSignalInit(void);
#if (defined(HAVE_SYS_PRCTL_H) && defined(PR_SET_PDEATHSIG)) || \
(defined(HAVE_SYS_PROCCTL_H) && defined(PROC_PDEATHSIG_CTL))
#define USE_POSTMASTER_DEATH_SIGNAL
#endif
#ifdef USE_POSTMASTER_DEATH_SIGNAL
extern PGDLLIMPORT volatile sig_atomic_t postmaster_possibly_dead;
static inline bool
PostmasterIsAlive(void)
{
if (likely(!postmaster_possibly_dead))
return true;
return PostmasterIsAliveInternal();
}
#else
#define PostmasterIsAlive() PostmasterIsAliveInternal()
#endif
#endif