97#define NumProcSignalSlots (MaxBackends + NUM_AUXILIARY_PROCS)
100#define BARRIER_SHOULD_CHECK(flags, type) \
101 (((flags) & (((uint32) 1) << (uint32) (type))) != 0)
104#define BARRIER_CLEAR_BIT(flags, type) \
105 ((flags) &= ~(((uint32) 1) << (uint32) (type)))
214 elog(
LOG,
"process %d taking over ProcSignal slot %d, but it's not empty",
254 elog(
LOG,
"process %d releasing ProcSignal slot %d, but it contains %d",
431 "waiting for all backends to process ProcSignalBarrier generation "
447 while (
oldval < generation)
453 (
errmsg(
"still waiting for backend with PID %d to accept ProcSignalBarrier",
461 "finished waiting for all backends to process ProcSignalBarrier generation "
573 bool processed =
true;
758 (
errmsg_internal(
"processing cancel request: sending SIGINT to process %d",
775 (
errmsg(
"wrong key in cancel request for process %d",
784 (
errmsg(
"PID %d in cancel request did not match any process",
void HandleParallelApplyMessageInterrupt(void)
void HandleNotifyInterrupt(void)
static void pg_atomic_write_u64(volatile pg_atomic_uint64 *ptr, uint64 val)
static uint32 pg_atomic_fetch_or_u32(volatile pg_atomic_uint32 *ptr, uint32 or_)
#define pg_memory_barrier()
static void pg_atomic_init_u32(volatile pg_atomic_uint32 *ptr, uint32 val)
static void pg_atomic_write_u32(volatile pg_atomic_uint32 *ptr, uint32 val)
static uint32 pg_atomic_read_u32(volatile pg_atomic_uint32 *ptr)
static uint64 pg_atomic_add_fetch_u64(volatile pg_atomic_uint64 *ptr, int64 add_)
static uint32 pg_atomic_exchange_u32(volatile pg_atomic_uint32 *ptr, uint32 newval)
static void pg_atomic_init_u64(volatile pg_atomic_uint64 *ptr, uint64 val)
static uint64 pg_atomic_read_u64(volatile pg_atomic_uint64 *ptr)
void HandleParallelMessageInterrupt(void)
#define Assert(condition)
#define FLEXIBLE_ARRAY_MEMBER
#define MemSet(start, val, len)
bool ConditionVariableCancelSleep(void)
bool ConditionVariableTimedSleep(ConditionVariable *cv, long timeout, uint32 wait_event_info)
void ConditionVariableBroadcast(ConditionVariable *cv)
void ConditionVariableInit(ConditionVariable *cv)
int errmsg(const char *fmt,...)
int int errmsg_internal(const char *fmt,...) pg_attribute_printf(1
#define ereport(elevel,...)
volatile sig_atomic_t ProcSignalBarrierPending
volatile sig_atomic_t InterruptPending
void on_shmem_exit(pg_on_exit_callback function, Datum arg)
void SetLatch(Latch *latch)
bool ProcessBarrierUpdateXLogLogicalInfo(void)
void HandleLogMemoryContextInterrupt(void)
static int pg_rightmost_one_pos32(uint32 word)
int timingsafe_bcmp(const void *b1, const void *b2, size_t n)
void HandleRecoveryConflictInterrupt(void)
#define INVALID_PROC_NUMBER
static void CleanupProcSignalState(int status, Datum arg)
int SendProcSignal(pid_t pid, ProcSignalReason reason, ProcNumber procNumber)
void ProcSignalInit(const uint8 *cancel_key, int cancel_key_len)
void ProcSignalShmemInit(void)
#define NumProcSignalSlots
static bool CheckProcSignal(ProcSignalReason reason)
void ProcessProcSignalBarrier(void)
void WaitForProcSignalBarrier(uint64 generation)
NON_EXEC_STATIC ProcSignalHeader * ProcSignal
static void ResetProcSignalBarrierBits(uint32 flags)
void SendCancelRequest(int backendPID, const uint8 *cancel_key, int cancel_key_len)
uint64 EmitProcSignalBarrier(ProcSignalBarrierType type)
Size ProcSignalShmemSize(void)
static void HandleProcSignalBarrierInterrupt(void)
static ProcSignalSlot * MyProcSignalSlot
#define BARRIER_CLEAR_BIT(flags, type)
void procsignal_sigusr1_handler(SIGNAL_ARGS)
@ PROCSIG_RECOVERY_CONFLICT
@ PROCSIG_PARALLEL_MESSAGE
@ PROCSIG_CATCHUP_INTERRUPT
@ PROCSIG_LOG_MEMORY_CONTEXT
@ PROCSIG_WALSND_INIT_STOPPING
@ PROCSIG_PARALLEL_APPLY_MESSAGE
@ PROCSIG_NOTIFY_INTERRUPT
@ PROCSIGNAL_BARRIER_SMGRRELEASE
@ PROCSIGNAL_BARRIER_UPDATE_XLOG_LOGICAL_INFO
#define MAX_CANCEL_KEY_LENGTH
Size add_size(Size s1, Size s2)
Size mul_size(Size s1, Size s2)
void * ShmemInitStruct(const char *name, Size size, bool *foundPtr)
void HandleCatchupInterrupt(void)
bool ProcessBarrierSmgrRelease(void)
static void SpinLockRelease(volatile slock_t *lock)
static void SpinLockAcquire(volatile slock_t *lock)
static void SpinLockInit(volatile slock_t *lock)
uint8 pss_cancel_key[MAX_CANCEL_KEY_LENGTH]
ConditionVariable pss_barrierCV
pg_atomic_uint64 pss_barrierGeneration
volatile sig_atomic_t pss_signalFlags[NUM_PROCSIGNALS]
pg_atomic_uint32 pss_barrierCheckMask
void HandleWalSndInitStopping(void)