PostgreSQL Source Code
git master
|
#include "postgres.h"
#include <signal.h>
#include <unistd.h>
#include "access/parallel.h"
#include "port/pg_bitutils.h"
#include "commands/async.h"
#include "miscadmin.h"
#include "pgstat.h"
#include "replication/walsender.h"
#include "storage/ipc.h"
#include "storage/latch.h"
#include "storage/proc.h"
#include "storage/shmem.h"
#include "storage/sinval.h"
#include "tcop/tcopprot.h"
Go to the source code of this file.
Data Structures | |
struct | ProcSignalSlot |
struct | ProcSignalHeader |
Macros | |
#define | NumProcSignalSlots (MaxBackends + NUM_AUXPROCTYPES) |
#define | BARRIER_SHOULD_CHECK(flags, type) (((flags) & (((uint32) 1) << (uint32) (type))) != 0) |
#define | BARRIER_CLEAR_BIT(flags, type) ((flags) &= ~(((uint32) 1) << (uint32) (type))) |
Functions | |
static bool | CheckProcSignal (ProcSignalReason reason) |
static void | CleanupProcSignalState (int status, Datum arg) |
static void | ResetProcSignalBarrierBits (uint32 flags) |
static bool | ProcessBarrierPlaceholder (void) |
Size | ProcSignalShmemSize (void) |
void | ProcSignalShmemInit (void) |
void | ProcSignalInit (int pss_idx) |
int | SendProcSignal (pid_t pid, ProcSignalReason reason, BackendId backendId) |
uint64 | EmitProcSignalBarrier (ProcSignalBarrierType type) |
void | WaitForProcSignalBarrier (uint64 generation) |
static void | HandleProcSignalBarrierInterrupt (void) |
void | ProcessProcSignalBarrier (void) |
void | procsignal_sigusr1_handler (SIGNAL_ARGS) |
Variables | |
static ProcSignalHeader * | ProcSignal = NULL |
static volatile ProcSignalSlot * | MyProcSignalSlot = NULL |
Definition at line 92 of file procsignal.c.
Referenced by ProcessProcSignalBarrier().
Definition at line 88 of file procsignal.c.
#define NumProcSignalSlots (MaxBackends + NUM_AUXPROCTYPES) |
Definition at line 85 of file procsignal.c.
Referenced by EmitProcSignalBarrier(), ProcSignalInit(), ProcSignalShmemInit(), ProcSignalShmemSize(), SendProcSignal(), and WaitForProcSignalBarrier().
|
static |
Definition at line 631 of file procsignal.c.
References MyProcSignalSlot, and ProcSignalSlot::pss_signalFlags.
Referenced by procsignal_sigusr1_handler().
|
static |
Definition at line 208 of file procsignal.c.
References Assert, DatumGetInt32, elog, LOG, MyProcPid, pg_atomic_write_u64(), PG_UINT64_MAX, ProcSignalHeader::psh_slot, ProcSignalSlot::pss_barrierGeneration, and ProcSignalSlot::pss_pid.
Referenced by ProcSignalInit().
uint64 EmitProcSignalBarrier | ( | ProcSignalBarrierType | type | ) |
Definition at line 327 of file procsignal.c.
References i, kill, NumProcSignalSlots, pg_atomic_add_fetch_u64(), pg_atomic_fetch_or_u32(), PROCSIG_BARRIER, ProcSignalHeader::psh_barrierGeneration, ProcSignalHeader::psh_slot, ProcSignalSlot::pss_barrierCheckMask, ProcSignalSlot::pss_pid, ProcSignalSlot::pss_signalFlags, and SIGUSR1.
|
static |
Definition at line 448 of file procsignal.c.
References InterruptPending, and ProcSignalBarrierPending.
Referenced by procsignal_sigusr1_handler().
|
static |
void ProcessProcSignalBarrier | ( | void | ) |
Definition at line 464 of file procsignal.c.
References Assert, BARRIER_CLEAR_BIT, pg_atomic_exchange_u32(), pg_atomic_read_u64(), pg_atomic_write_u64(), PG_CATCH, PG_END_TRY, PG_RE_THROW, pg_rightmost_one_pos32(), PG_TRY, ProcessBarrierPlaceholder(), PROCSIGNAL_BARRIER_PLACEHOLDER, ProcSignalBarrierPending, ProcSignalHeader::psh_barrierGeneration, ProcSignalSlot::pss_barrierCheckMask, ProcSignalSlot::pss_barrierGeneration, ResetProcSignalBarrierBits(), success, and generate_unaccent_rules::type.
Referenced by BufferSync(), CheckpointWriteDelay(), HandleAutoVacLauncherInterrupts(), HandleCheckpointerInterrupts(), HandleMainLoopInterrupts(), HandleStartupProcInterrupts(), and ProcessInterrupts().
void procsignal_sigusr1_handler | ( | SIGNAL_ARGS | ) |
Definition at line 652 of file procsignal.c.
References CheckProcSignal(), HandleCatchupInterrupt(), HandleNotifyInterrupt(), HandleParallelMessageInterrupt(), HandleProcSignalBarrierInterrupt(), HandleWalSndInitStopping(), latch_sigusr1_handler(), MyLatch, PROCSIG_BARRIER, PROCSIG_CATCHUP_INTERRUPT, PROCSIG_NOTIFY_INTERRUPT, PROCSIG_PARALLEL_MESSAGE, PROCSIG_RECOVERY_CONFLICT_BUFFERPIN, PROCSIG_RECOVERY_CONFLICT_DATABASE, PROCSIG_RECOVERY_CONFLICT_LOCK, PROCSIG_RECOVERY_CONFLICT_SNAPSHOT, PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK, PROCSIG_RECOVERY_CONFLICT_TABLESPACE, PROCSIG_WALSND_INIT_STOPPING, RecoveryConflictInterrupt(), and SetLatch().
Referenced by autoprewarm_main(), AutoVacLauncherMain(), AutoVacWorkerMain(), BackgroundWriterMain(), CheckpointerMain(), PostgresMain(), StartBackgroundWorker(), StartupProcessMain(), WalReceiverMain(), WalSndSignals(), and WalWriterMain().
void ProcSignalInit | ( | int | pss_idx | ) |
Definition at line 157 of file procsignal.c.
References Assert, CleanupProcSignalState(), elog, Int32GetDatum, LOG, MemSet, MyProcPid, NUM_PROCSIGNALS, NumProcSignalSlots, on_shmem_exit(), pg_atomic_read_u64(), pg_atomic_write_u32(), pg_atomic_write_u64(), pg_memory_barrier, ProcSignalHeader::psh_barrierGeneration, ProcSignalHeader::psh_slot, ProcSignalSlot::pss_barrierCheckMask, ProcSignalSlot::pss_barrierGeneration, ProcSignalSlot::pss_pid, and ProcSignalSlot::pss_signalFlags.
Referenced by AuxiliaryProcessMain(), and InitPostgres().
void ProcSignalShmemInit | ( | void | ) |
Definition at line 122 of file procsignal.c.
References i, MemSet, NumProcSignalSlots, pg_atomic_init_u32(), pg_atomic_init_u64(), PG_UINT64_MAX, ProcSignalShmemSize(), ProcSignalHeader::psh_barrierGeneration, ProcSignalHeader::psh_slot, ProcSignalSlot::pss_barrierCheckMask, ProcSignalSlot::pss_barrierGeneration, ProcSignalSlot::pss_pid, ProcSignalSlot::pss_signalFlags, and ShmemInitStruct().
Referenced by CreateSharedMemoryAndSemaphores().
Size ProcSignalShmemSize | ( | void | ) |
Definition at line 108 of file procsignal.c.
References add_size(), mul_size(), NumProcSignalSlots, and offsetof.
Referenced by CreateSharedMemoryAndSemaphores(), and ProcSignalShmemInit().
|
static |
Definition at line 600 of file procsignal.c.
References InterruptPending, pg_atomic_fetch_or_u32(), ProcSignalBarrierPending, and ProcSignalSlot::pss_barrierCheckMask.
Referenced by ProcessProcSignalBarrier().
int SendProcSignal | ( | pid_t | pid, |
ProcSignalReason | reason, | ||
BackendId | backendId | ||
) |
Definition at line 256 of file procsignal.c.
References i, InvalidBackendId, kill, NumProcSignalSlots, ProcSignalHeader::psh_slot, ProcSignalSlot::pss_pid, ProcSignalSlot::pss_signalFlags, and SIGUSR1.
Referenced by CancelDBBackends(), mq_putmessage(), ParallelWorkerShutdown(), SICleanupQueue(), SignalBackends(), SignalVirtualTransaction(), and WalSndInitStopping().
void WaitForProcSignalBarrier | ( | uint64 | generation | ) |
Definition at line 392 of file procsignal.c.
References Assert, CHECK_FOR_INTERRUPTS, i, Min, MyLatch, NumProcSignalSlots, pg_atomic_read_u64(), pg_memory_barrier, ProcSignalHeader::psh_barrierGeneration, ProcSignalHeader::psh_slot, ProcSignalSlot::pss_barrierGeneration, ResetLatch(), WAIT_EVENT_PROC_SIGNAL_BARRIER, WaitLatch(), WL_EXIT_ON_PM_DEATH, WL_LATCH_SET, and WL_TIMEOUT.
|
static |
Definition at line 96 of file procsignal.c.
Referenced by CheckProcSignal().
|
static |
Definition at line 95 of file procsignal.c.