diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2024-03-18 11:35:08 +0200 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2024-03-18 11:35:30 +0200 |
commit | aafc05de1bf5c0324cb5e690c6742118c1ac4af6 (patch) | |
tree | c750628b17b1175e2ec4bb420275d3b6f2bced6b /src/backend/postmaster/checkpointer.c | |
parent | f1baed18bc3db50c72bfb00b6247b47689158445 (diff) | |
download | postgresql-aafc05de1bf5c0324cb5e690c6742118c1ac4af6.tar.gz postgresql-aafc05de1bf5c0324cb5e690c6742118c1ac4af6.zip |
Refactor postmaster child process launching
Introduce new postmaster_child_launch() function that deals with the
differences in EXEC_BACKEND mode.
Refactor the mechanism of passing information from the parent to child
process. Instead of using different command-line arguments when
launching the child process in EXEC_BACKEND mode, pass a
variable-length blob of startup data along with all the global
variables. The contents of that blob depend on the kind of child
process being launched. In !EXEC_BACKEND mode, we use the same blob,
but it's simply inherited from the parent to child process.
Reviewed-by: Tristan Partin, Andres Freund
Discussion: https://www.postgresql.org/message-id/7a59b073-5b5b-151e-7ed3-8b01ff7ce9ef@iki.fi
Diffstat (limited to 'src/backend/postmaster/checkpointer.c')
-rw-r--r-- | src/backend/postmaster/checkpointer.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/backend/postmaster/checkpointer.c b/src/backend/postmaster/checkpointer.c index 46197d56f86..8ef600ae72a 100644 --- a/src/backend/postmaster/checkpointer.c +++ b/src/backend/postmaster/checkpointer.c @@ -42,6 +42,7 @@ #include "libpq/pqsignal.h" #include "miscadmin.h" #include "pgstat.h" +#include "postmaster/auxprocess.h" #include "postmaster/bgwriter.h" #include "postmaster/interrupt.h" #include "replication/syncrep.h" @@ -169,11 +170,16 @@ static void ReqCheckpointHandler(SIGNAL_ARGS); * basic execution environment, but not enabled signals yet. */ void -CheckpointerMain(void) +CheckpointerMain(char *startup_data, size_t startup_data_len) { sigjmp_buf local_sigjmp_buf; MemoryContext checkpointer_context; + Assert(startup_data_len == 0); + + MyBackendType = B_CHECKPOINTER; + AuxiliaryProcessMainCommon(); + CheckpointerShmem->checkpointer_pid = MyProcPid; /* |