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().