PostgreSQL Source Code: src/include/storage/ipc.h File Reference (original) (raw)

Go to the source code of this file.

Functions
pg_noreturn void proc_exit (int code)
void shmem_exit (int code)
void on_proc_exit (pg_on_exit_callback function, Datum arg)
void on_shmem_exit (pg_on_exit_callback function, Datum arg)
void before_shmem_exit (pg_on_exit_callback function, Datum arg)
void cancel_before_shmem_exit (pg_on_exit_callback function, Datum arg)
void on_exit_reset (void)
void check_on_shmem_exit_lists_are_empty (void)
Size CalculateShmemSize (int *num_semaphores)
void CreateSharedMemoryAndSemaphores (void)
void InitializeShmemGUCs (void)
Variables
PGDLLIMPORT bool proc_exit_inprogress
PGDLLIMPORT bool shmem_exit_inprogress
PGDLLIMPORT shmem_startup_hook_type shmem_startup_hook

PG_END_ENSURE_ERROR_CLEANUP

| #define PG_END_ENSURE_ERROR_CLEANUP | ( | | cleanup_function, | | ------------------------------------------------------------------------------- | - | | ------------------ | | | arg | | | | | ) | | | |

Value:

PG_CATCH(); \

{ \

cancel_before_shmem_exit(cleanup_function, arg); \

cleanup_function (0, arg); \

PG_RE_THROW(); \

} \

PG_END_TRY(); \

} while (0)

void cancel_before_shmem_exit(pg_on_exit_callback function, Datum arg)

Definition at line 52 of file ipc.h.

PG_ENSURE_ERROR_CLEANUP

| #define PG_ENSURE_ERROR_CLEANUP | ( | | cleanup_function, | | ------------------------------------------------------------------------------- | - | | ------------------ | | | arg | | | | | ) | | | |

Value:

do { \

before_shmem_exit(cleanup_function, arg); \

PG_TRY()

Definition at line 47 of file ipc.h.

pg_on_exit_callback

typedef void(* pg_on_exit_callback) (int code, Datum arg)

Definition at line 21 of file ipc.h.

shmem_startup_hook_type

typedef void(* shmem_startup_hook_type) (void)

Definition at line 22 of file ipc.h.

before_shmem_exit()

Definition at line 337 of file ipc.c.

338{

341 (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),

343

346

348

350 {

353 }

354}

int errmsg_internal(const char *fmt,...)

int errcode(int sqlerrcode)

#define ereport(elevel,...)

static bool atexit_callback_setup

static void atexit_callback(void)

static int before_shmem_exit_index

static struct ONEXIT before_shmem_exit_list[MAX_ON_EXITS]

on_exit_nicely_callback function

pg_on_exit_callback function

References ONEXIT::arg, arg, atexit_callback(), atexit_callback_setup, before_shmem_exit_index, before_shmem_exit_list, ereport, errcode(), errmsg_internal(), FATAL, ONEXIT::function, function, and MAX_ON_EXITS.

Referenced by ApplyLauncherMain(), AtEOXact_Namespace(), autoprewarm_main(), AuxiliaryProcessMainCommon(), CheckpointerMain(), Exec_ListenPreCommit(), InitPostgres(), InitTemporaryFileAccess(), injection_points_set_local(), LoadArchiveLibrary(), LockGXact(), logicalrep_worker_attach(), MarkAsPreparing(), ParallelApplyWorkerMain(), ParallelWorkerMain(), pgaio_init_backend(), pgstat_initialize(), register_persistent_abort_backup_handler(), ReplicationSlotInitialize(), ReplSlotSyncWorkerMain(), and SetupApplyOrSyncWorker().

CalculateShmemSize()

Size CalculateShmemSize ( int * num_semaphores )

Definition at line 89 of file ipci.c.

90{

92 int numSemas;

93

94

96

97

98 if (num_semaphores)

99 *num_semaphores = numSemas;

100

101

102

103

104

105

106

107

108

109

110 size = 100000;

153

154

156

157

158 size = add_size(size, 8192 - (size % 8192));

159

160 return size;

161}

Size AsyncShmemSize(void)

Size AutoVacuumShmemSize(void)

Size BackendStatusShmemSize(void)

Size BackgroundWorkerShmemSize(void)

Size BufferManagerShmemSize(void)

Size CheckpointerShmemSize(void)

Size CommitTsShmemSize(void)

size_t dsm_estimate_size(void)

Size DSMRegistryShmemSize(void)

Size hash_estimate_size(long num_entries, Size entrysize)

Size InjectionPointShmemSize(void)

static Size total_addin_request

Size ApplyLauncherShmemSize(void)

Size LockManagerShmemSize(void)

Size LWLockShmemSize(void)

Size MultiXactShmemSize(void)

Size BTreeShmemSize(void)

Size ReplicationOriginShmemSize(void)

Size PgArchShmemSize(void)

Size StatsShmemSize(void)

Size PMSignalShmemSize(void)

Size PGSemaphoreShmemSize(int maxSemas)

Size PredicateLockShmemSize(void)

Size ProcArrayShmemSize(void)

Size ProcSignalShmemSize(void)

Size add_size(Size s1, Size s2)

Size SharedInvalShmemSize(void)

Size ReplicationSlotsShmemSize(void)

Size SlotSyncShmemSize(void)

Size ProcGlobalShmemSize(void)

int ProcGlobalSemas(void)

Size SUBTRANSShmemSize(void)

Size SyncScanShmemSize(void)

Size TwoPhaseShmemSize(void)

Size VarsupShmemSize(void)

Size WaitEventCustomShmemSize(void)

Size WalRcvShmemSize(void)

Size WalSndShmemSize(void)

Size WalSummarizerShmemSize(void)

size_t XLogPrefetchShmemSize(void)

Size XLogRecoveryShmemSize(void)

References add_size(), AioShmemSize(), ApplyLauncherShmemSize(), AsyncShmemSize(), AutoVacuumShmemSize(), BackendStatusShmemSize(), BackgroundWorkerShmemSize(), BTreeShmemSize(), BufferManagerShmemSize(), CheckpointerShmemSize(), CLOGShmemSize(), CommitTsShmemSize(), dsm_estimate_size(), DSMRegistryShmemSize(), hash_estimate_size(), InjectionPointShmemSize(), LockManagerShmemSize(), LWLockShmemSize(), MultiXactShmemSize(), PgArchShmemSize(), PGSemaphoreShmemSize(), PMSignalShmemSize(), PredicateLockShmemSize(), ProcArrayShmemSize(), ProcGlobalSemas(), ProcGlobalShmemSize(), ProcSignalShmemSize(), ReplicationOriginShmemSize(), ReplicationSlotsShmemSize(), SharedInvalShmemSize(), SHMEM_INDEX_SIZE, SlotSyncShmemSize(), StatsShmemSize(), SUBTRANSShmemSize(), SyncScanShmemSize(), total_addin_request, TwoPhaseShmemSize(), VarsupShmemSize(), WaitEventCustomShmemSize(), WalRcvShmemSize(), WalSndShmemSize(), WalSummarizerShmemSize(), XLogPrefetchShmemSize(), XLogRecoveryShmemSize(), and XLOGShmemSize().

Referenced by CreateSharedMemoryAndSemaphores(), and InitializeShmemGUCs().

cancel_before_shmem_exit()

check_on_shmem_exit_lists_are_empty()

void check_on_shmem_exit_lists_are_empty ( void )

CreateSharedMemoryAndSemaphores()

void CreateSharedMemoryAndSemaphores ( void )

Definition at line 200 of file ipci.c.

201{

205 int numSemas;

206

208

209

211 elog(DEBUG3, "invoking IpcMemoryCreate(size=%zu)", size);

212

213

214

215

217

218

219

220

221

222 Assert(strcmp("unknown",

223 GetConfigOption("huge_pages_status", false, false)) != 0);

224

226

227

228

229

231

232

233

234

236

237

239

240

242

243

244

245

248}

void dsm_postmaster_startup(PGShmemHeader *shim)

const char * GetConfigOption(const char *name, bool missing_ok, bool restrict_privileged)

Assert(PointerIsAligned(start, uint64))

shmem_startup_hook_type shmem_startup_hook

Size CalculateShmemSize(int *num_semaphores)

static void CreateOrAttachShmemStructs(void)

void PGReserveSemaphores(int maxSemas)

void InitShmemAccess(PGShmemHeader *seghdr)

void InitShmemAllocation(void)

PGShmemHeader * PGSharedMemoryCreate(Size size, PGShmemHeader **shim)

References Assert(), CalculateShmemSize(), CreateOrAttachShmemStructs(), DEBUG3, dsm_postmaster_startup(), elog, GetConfigOption(), InitShmemAccess(), InitShmemAllocation(), IsUnderPostmaster, PGReserveSemaphores(), PGSharedMemoryCreate(), and shmem_startup_hook.

Referenced by BootstrapModeMain(), PostgresSingleUserMain(), PostmasterMain(), and PostmasterStateMachine().

InitializeShmemGUCs()

void InitializeShmemGUCs ( void )

Definition at line 355 of file ipci.c.

356{

357 char buf[64];

359 Size size_mb;

360 Size hp_size;

361 int num_semas;

362

363

364

365

367 size_mb = add_size(size_b, (1024 * 1024) - 1) / (1024 * 1024);

371

372

373

374

376 if (hp_size != 0)

377 {

378 Size hp_required;

379

380 hp_required = add_size(size_b / hp_size, 1);

384 }

385

388}

void SetConfigOption(const char *name, const char *value, GucContext context, GucSource source)

void GetHugePageSize(Size *hugepagesize, int *mmap_flags)

References add_size(), buf, CalculateShmemSize(), GetHugePageSize(), PGC_INTERNAL, PGC_S_DYNAMIC_DEFAULT, SetConfigOption(), and sprintf.

Referenced by PostgresSingleUserMain(), and PostmasterMain().

on_exit_reset()

void on_exit_reset ( void )

on_proc_exit()

Definition at line 309 of file ipc.c.

310{

313 (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),

315

318

320

322 {

325 }

326}

static struct ONEXIT on_proc_exit_list[MAX_ON_EXITS]

References ONEXIT::arg, arg, atexit_callback(), atexit_callback_setup, ereport, errcode(), errmsg_internal(), FATAL, ONEXIT::function, function, MAX_ON_EXITS, on_proc_exit_index, and on_proc_exit_list.

Referenced by CreateLockFile(), InitCatCache(), llvm_session_initialize(), PostgresMain(), PostmasterMain(), pq_init(), select_perl_context(), sepgsql_avc_init(), and smgrinit().

on_shmem_exit()

Definition at line 365 of file ipc.c.

366{

369 (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),

371

374

376

378 {

381 }

382}

static struct ONEXIT on_shmem_exit_list[MAX_ON_EXITS]

References ONEXIT::arg, arg, atexit_callback(), atexit_callback_setup, ereport, errcode(), errmsg_internal(), FATAL, ONEXIT::function, function, MAX_ON_EXITS, on_shmem_exit_index, and on_shmem_exit_list.

Referenced by AutoVacWorkerMain(), CreateAuxProcessResourceOwner(), dsm_postmaster_startup(), InitAuxiliaryProcess(), InitBufferManagerAccess(), InitProcess(), InitProcessPhase2(), InitWalSenderSlot(), InternalIpcMemoryCreate(), pgaio_worker_register(), PgArchiverMain(), PGReserveSemaphores(), PGSharedMemoryCreate(), pgss_shmem_startup(), pgstat_beinit(), ProcSignalInit(), RegisterPostmasterChildActive(), replorigin_session_setup(), SharedInvalBackendInit(), StartupProcessMain(), WalReceiverMain(), and WalSummarizerMain().

proc_exit()

Definition at line 104 of file ipc.c.

105{

106

108 elog(PANIC, "proc_exit() called in child process");

109

110

112

113#ifdef PROFILE_PID_DIR

114 {

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137 char gprofDirName[32];

138

140 snprintf(gprofDirName, 32, "gprof/avworker");

141 else

142 snprintf(gprofDirName, 32, "gprof/%d", (int) getpid());

143

144

145

146

147

150 chdir(gprofDirName);

151 }

152#endif

153

155

156 exit(code);

157}

static void proc_exit_prepare(int code)

#define AmAutoVacuumWorkerProcess()

References AmAutoVacuumWorkerProcess, DEBUG3, elog, mkdir, MyProcPid, PANIC, proc_exit_prepare(), S_IRWXG, S_IRWXO, S_IRWXU, and snprintf.

Referenced by apply_worker_exit(), ApplyWorkerMain(), auth_failed(), AutoVacLauncherMain(), AutoVacLauncherShutdown(), AutoVacWorkerMain(), BackendInitialize(), BackgroundWorkerMain(), BootstrapModeMain(), CheckerModeMain(), CheckpointerMain(), DisableSubscriptionAndExit(), errfinish(), ExitPostmaster(), finish_sync_worker(), InitializeLogRepWorker(), IoWorkerMain(), maybe_reread_subscription(), PerformWalRecovery(), PgArchiverMain(), PostgresMain(), PostgresSingleUserMain(), PreRestoreCommand(), process_syncing_tables_for_apply(), ProcessInterrupts(), ProcessMainLoopInterrupts(), ProcessParallelApplyInterrupts(), ProcessPgArchInterrupts(), ProcessRepliesIfAny(), ProcessSlotSyncInterrupts(), ProcessStandbyMessage(), ProcessStartupProcInterrupts(), ProcessWalSummarizerInterrupts(), ReplSlotSyncWorkerMain(), RestoreArchivedFile(), slotsync_reread_config(), StartLogicalReplication(), StartReplication(), StartupProcessMain(), StartupProcShutdownHandler(), SysLoggerMain(), test_shm_mq_main(), WaitEventSetWaitBlock(), WalRcvWaitForStartPosition(), WalReceiverMain(), WalSndDone(), WalSndErrorCleanup(), WalSndShutdown(), WalSndWait(), and WalSummarizerMain().

shmem_exit()

void shmem_exit ( int code )

Definition at line 228 of file ipc.c.

229{

231

232

233

234

235

236

237

238

239

240 elog(DEBUG3, "shmem_exit(%d): %d before_shmem_exit callbacks to make",

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

264

265

266

267

268

269

270

271

272

273 elog(DEBUG3, "shmem_exit(%d): %d on_shmem_exit callbacks to make",

279

281}

void dsm_backend_shutdown(void)

bool shmem_exit_inprogress

References arg, before_shmem_exit_index, before_shmem_exit_list, DEBUG3, dsm_backend_shutdown(), elog, ONEXIT::function, on_shmem_exit_index, on_shmem_exit_list, and shmem_exit_inprogress.

Referenced by PostmasterStateMachine(), and proc_exit_prepare().

proc_exit_inprogress

shmem_exit_inprogress

shmem_startup_hook