PostgreSQL Source Code: src/backend/postmaster/auxprocess.c Source File

PostgreSQL Source Code git master
auxprocess.c
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 * auxprocess.c
3 * functions related to auxiliary processes.
4 *
5 *
6 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
7 * Portions Copyright (c) 1994, Regents of the University of California
8 *
9 * IDENTIFICATION
10 * src/backend/postmaster/auxprocess.c
11 *-------------------------------------------------------------------------
12 */
13#include "postgres.h"
14
15#include <unistd.h>
16#include <signal.h>
17
18#include "miscadmin.h"
19#include "pgstat.h"
20#include "postmaster/auxprocess.h"
21#include "storage/condition_variable.h"
22#include "storage/ipc.h"
23#include "storage/proc.h"
24#include "storage/procsignal.h"
25#include "utils/memutils.h"
26#include "utils/ps_status.h"
27
28
29static void ShutdownAuxiliaryProcess(int code, Datum arg);
30
31
32/*
33 * AuxiliaryProcessMainCommon
34 *
35 * Common initialization code for auxiliary processes, such as the bgwriter,
36 * walwriter, walreceiver, and the startup process.
37 */
38void
39 AuxiliaryProcessMainCommon(void)
40{
41 Assert(IsUnderPostmaster);
42
43 /* Release postmaster's working memory context */
44 if (PostmasterContext)
45 {
46 MemoryContextDelete(PostmasterContext);
47 PostmasterContext = NULL;
48 }
49
50 init_ps_display(NULL);
51
52 Assert(GetProcessingMode() == InitProcessing);
53
54 IgnoreSystemIndexes = true;
55
56 /*
57 * As an auxiliary process, we aren't going to do the full InitPostgres
58 * pushups, but there are a couple of things that need to get lit up even
59 * in an auxiliary process.
60 */
61
62 /*
63 * Create a PGPROC so we can use LWLocks and access shared memory.
64 */
65 InitAuxiliaryProcess();
66
67 BaseInit();
68
69 ProcSignalInit(NULL, 0);
70
71 /*
72 * Auxiliary processes don't run transactions, but they may need a
73 * resource owner anyway to manage buffer pins acquired outside
74 * transactions (and, perhaps, other things in future).
75 */
76 CreateAuxProcessResourceOwner();
77
78
79 /* Initialize backend status information */
80 pgstat_beinit();
81 pgstat_bestart_initial();
82 pgstat_bestart_final();
83
84 /* register a before-shutdown callback for LWLock cleanup */
85 before_shmem_exit(ShutdownAuxiliaryProcess, 0);
86
87 SetProcessingMode(NormalProcessing);
88}
89
90/*
91 * Begin shutdown of an auxiliary process. This is approximately the equivalent
92 * of ShutdownPostgres() in postinit.c. We can't run transactions in an
93 * auxiliary process, so most of the work of AbortTransaction() is not needed,
94 * but we do need to make sure we've released any LWLocks we are holding.
95 * (This is only critical during an error exit.)
96 */
97static void
98 ShutdownAuxiliaryProcess(int code, Datum arg)
99{
100 LWLockReleaseAll();
101 ConditionVariableCancelSleep();
102 pgstat_report_wait_end();
103}
void AuxiliaryProcessMainCommon(void)
Definition: auxprocess.c:39
static void ShutdownAuxiliaryProcess(int code, Datum arg)
Definition: auxprocess.c:98
void pgstat_bestart_initial(void)
void pgstat_beinit(void)
void pgstat_bestart_final(void)
bool ConditionVariableCancelSleep(void)
bool IsUnderPostmaster
Definition: globals.c:120
Assert(PointerIsAligned(start, uint64))
void before_shmem_exit(pg_on_exit_callback function, Datum arg)
Definition: ipc.c:337
void LWLockReleaseAll(void)
Definition: lwlock.c:1945
MemoryContext PostmasterContext
Definition: mcxt.c:168
void MemoryContextDelete(MemoryContext context)
Definition: mcxt.c:469
@ NormalProcessing
Definition: miscadmin.h:471
@ InitProcessing
Definition: miscadmin.h:470
#define GetProcessingMode()
Definition: miscadmin.h:480
#define SetProcessingMode(mode)
Definition: miscadmin.h:482
bool IgnoreSystemIndexes
Definition: miscinit.c:81
void * arg
uint64_t Datum
Definition: postgres.h:70
void BaseInit(void)
Definition: postinit.c:611
void ProcSignalInit(const uint8 *cancel_key, int cancel_key_len)
Definition: procsignal.c:166
void init_ps_display(const char *fixed_part)
Definition: ps_status.c:285
void CreateAuxProcessResourceOwner(void)
Definition: resowner.c:996
void InitAuxiliaryProcess(void)
Definition: proc.c:615
static void pgstat_report_wait_end(void)
Definition: wait_event.h:85

AltStyle によって変換されたページ (->オリジナル) /