1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-26 01:22:12 +03:00

backend launchers void * arguments for binary data

Change backend launcher functions to take void * for binary data
instead of char *.  This removes the need for numerous casts.

Reviewed-by: Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>
Discussion: https://www.postgresql.org/message-id/flat/fd1fcedb-3492-4fc8-9e3e-74b97f2db6c7%40eisentraut.org
This commit is contained in:
Peter Eisentraut
2025-02-21 08:03:33 +01:00
parent b50a554cc8
commit 7202d72787
26 changed files with 42 additions and 42 deletions

View File

@ -364,7 +364,7 @@ static void check_av_worker_gucs(void);
* Main entry point for the autovacuum launcher process. * Main entry point for the autovacuum launcher process.
*/ */
void void
AutoVacLauncherMain(char *startup_data, size_t startup_data_len) AutoVacLauncherMain(const void *startup_data, size_t startup_data_len)
{ {
sigjmp_buf local_sigjmp_buf; sigjmp_buf local_sigjmp_buf;
@ -1371,7 +1371,7 @@ avl_sigusr2_handler(SIGNAL_ARGS)
* Main entry point for autovacuum worker processes. * Main entry point for autovacuum worker processes.
*/ */
void void
AutoVacWorkerMain(char *startup_data, size_t startup_data_len) AutoVacWorkerMain(const void *startup_data, size_t startup_data_len)
{ {
sigjmp_buf local_sigjmp_buf; sigjmp_buf local_sigjmp_buf;
Oid dbid; Oid dbid;

View File

@ -714,7 +714,7 @@ bgworker_die(SIGNAL_ARGS)
* Main entry point for background worker processes. * Main entry point for background worker processes.
*/ */
void void
BackgroundWorkerMain(char *startup_data, size_t startup_data_len) BackgroundWorkerMain(const void *startup_data, size_t startup_data_len)
{ {
sigjmp_buf local_sigjmp_buf; sigjmp_buf local_sigjmp_buf;
BackgroundWorker *worker; BackgroundWorker *worker;

View File

@ -84,7 +84,7 @@ static XLogRecPtr last_snapshot_lsn = InvalidXLogRecPtr;
* basic execution environment, but not enabled signals yet. * basic execution environment, but not enabled signals yet.
*/ */
void void
BackgroundWriterMain(char *startup_data, size_t startup_data_len) BackgroundWriterMain(const void *startup_data, size_t startup_data_len)
{ {
sigjmp_buf local_sigjmp_buf; sigjmp_buf local_sigjmp_buf;
MemoryContext bgwriter_context; MemoryContext bgwriter_context;

View File

@ -175,7 +175,7 @@ static void ReqShutdownXLOG(SIGNAL_ARGS);
* basic execution environment, but not enabled signals yet. * basic execution environment, but not enabled signals yet.
*/ */
void void
CheckpointerMain(char *startup_data, size_t startup_data_len) CheckpointerMain(const void *startup_data, size_t startup_data_len)
{ {
sigjmp_buf local_sigjmp_buf; sigjmp_buf local_sigjmp_buf;
MemoryContext checkpointer_context; MemoryContext checkpointer_context;

View File

@ -149,7 +149,7 @@ typedef struct
#define SizeOfBackendParameters(startup_data_len) (offsetof(BackendParameters, startup_data) + startup_data_len) #define SizeOfBackendParameters(startup_data_len) (offsetof(BackendParameters, startup_data) + startup_data_len)
static void read_backend_variables(char *id, char **startup_data, size_t *startup_data_len); static void read_backend_variables(char *id, void **startup_data, size_t *startup_data_len);
static void restore_backend_variables(BackendParameters *param); static void restore_backend_variables(BackendParameters *param);
static bool save_backend_variables(BackendParameters *param, int child_slot, static bool save_backend_variables(BackendParameters *param, int child_slot,
@ -157,10 +157,10 @@ static bool save_backend_variables(BackendParameters *param, int child_slot,
#ifdef WIN32 #ifdef WIN32
HANDLE childProcess, pid_t childPid, HANDLE childProcess, pid_t childPid,
#endif #endif
char *startup_data, size_t startup_data_len); const void *startup_data, size_t startup_data_len);
static pid_t internal_forkexec(const char *child_kind, int child_slot, static pid_t internal_forkexec(const char *child_kind, int child_slot,
char *startup_data, size_t startup_data_len, const void *startup_data, size_t startup_data_len,
ClientSocket *client_sock); ClientSocket *client_sock);
#endif /* EXEC_BACKEND */ #endif /* EXEC_BACKEND */
@ -171,7 +171,7 @@ static pid_t internal_forkexec(const char *child_kind, int child_slot,
typedef struct typedef struct
{ {
const char *name; const char *name;
void (*main_fn) (char *startup_data, size_t startup_data_len) pg_attribute_noreturn(); void (*main_fn) (const void *startup_data, size_t startup_data_len) pg_attribute_noreturn();
bool shmem_attach; bool shmem_attach;
} child_process_kind; } child_process_kind;
@ -225,7 +225,7 @@ PostmasterChildName(BackendType child_type)
*/ */
pid_t pid_t
postmaster_child_launch(BackendType child_type, int child_slot, postmaster_child_launch(BackendType child_type, int child_slot,
char *startup_data, size_t startup_data_len, const void *startup_data, size_t startup_data_len,
ClientSocket *client_sock) ClientSocket *client_sock)
{ {
pid_t pid; pid_t pid;
@ -289,7 +289,7 @@ postmaster_child_launch(BackendType child_type, int child_slot,
*/ */
static pid_t static pid_t
internal_forkexec(const char *child_kind, int child_slot, internal_forkexec(const char *child_kind, int child_slot,
char *startup_data, size_t startup_data_len, ClientSocket *client_sock) const void *startup_data, size_t startup_data_len, ClientSocket *client_sock)
{ {
static unsigned long tmpBackendFileNum = 0; static unsigned long tmpBackendFileNum = 0;
pid_t pid; pid_t pid;
@ -399,7 +399,7 @@ internal_forkexec(const char *child_kind, int child_slot,
*/ */
static pid_t static pid_t
internal_forkexec(const char *child_kind, int child_slot, internal_forkexec(const char *child_kind, int child_slot,
char *startup_data, size_t startup_data_len, ClientSocket *client_sock) const void *startup_data, size_t startup_data_len, ClientSocket *client_sock)
{ {
int retry_count = 0; int retry_count = 0;
STARTUPINFO si; STARTUPINFO si;
@ -581,7 +581,7 @@ retry:
void void
SubPostmasterMain(int argc, char *argv[]) SubPostmasterMain(int argc, char *argv[])
{ {
char *startup_data; void *startup_data;
size_t startup_data_len; size_t startup_data_len;
char *child_kind; char *child_kind;
BackendType child_type; BackendType child_type;
@ -699,7 +699,7 @@ save_backend_variables(BackendParameters *param,
#ifdef WIN32 #ifdef WIN32
HANDLE childProcess, pid_t childPid, HANDLE childProcess, pid_t childPid,
#endif #endif
char *startup_data, size_t startup_data_len) const void *startup_data, size_t startup_data_len)
{ {
if (client_sock) if (client_sock)
memcpy(&param->client_sock, client_sock, sizeof(ClientSocket)); memcpy(&param->client_sock, client_sock, sizeof(ClientSocket));
@ -867,7 +867,7 @@ read_inheritable_socket(SOCKET *dest, InheritableSocket *src)
#endif #endif
static void static void
read_backend_variables(char *id, char **startup_data, size_t *startup_data_len) read_backend_variables(char *id, void **startup_data, size_t *startup_data_len)
{ {
BackendParameters param; BackendParameters param;

View File

@ -214,7 +214,7 @@ PgArchCanRestart(void)
/* Main entry point for archiver process */ /* Main entry point for archiver process */
void void
PgArchiverMain(char *startup_data, size_t startup_data_len) PgArchiverMain(const void *startup_data, size_t startup_data_len)
{ {
Assert(startup_data_len == 0); Assert(startup_data_len == 0);

View File

@ -3517,7 +3517,7 @@ BackendStartup(ClientSocket *client_sock)
bn->bgworker_notify = false; bn->bgworker_notify = false;
pid = postmaster_child_launch(bn->bkend_type, bn->child_slot, pid = postmaster_child_launch(bn->bkend_type, bn->child_slot,
(char *) &startup_data, sizeof(startup_data), &startup_data, sizeof(startup_data),
client_sock); client_sock);
if (pid < 0) if (pid < 0)
{ {
@ -4080,7 +4080,7 @@ StartBackgroundWorker(RegisteredBgWorker *rw)
rw->rw_worker.bgw_name))); rw->rw_worker.bgw_name)));
worker_pid = postmaster_child_launch(B_BG_WORKER, bn->child_slot, worker_pid = postmaster_child_launch(B_BG_WORKER, bn->child_slot,
(char *) &rw->rw_worker, sizeof(BackgroundWorker), NULL); &rw->rw_worker, sizeof(BackgroundWorker), NULL);
if (worker_pid == -1) if (worker_pid == -1)
{ {
/* in postmaster, fork failed ... */ /* in postmaster, fork failed ... */

View File

@ -213,7 +213,7 @@ StartupProcExit(int code, Datum arg)
* ---------------------------------- * ----------------------------------
*/ */
void void
StartupProcessMain(char *startup_data, size_t startup_data_len) StartupProcessMain(const void *startup_data, size_t startup_data_len)
{ {
Assert(startup_data_len == 0); Assert(startup_data_len == 0);

View File

@ -162,7 +162,7 @@ typedef struct
* argc/argv parameters are valid only in EXEC_BACKEND case. * argc/argv parameters are valid only in EXEC_BACKEND case.
*/ */
void void
SysLoggerMain(char *startup_data, size_t startup_data_len) SysLoggerMain(const void *startup_data, size_t startup_data_len)
{ {
#ifndef WIN32 #ifndef WIN32
char logbuffer[READ_BUF_SIZE]; char logbuffer[READ_BUF_SIZE];
@ -183,7 +183,7 @@ SysLoggerMain(char *startup_data, size_t startup_data_len)
*/ */
#ifdef EXEC_BACKEND #ifdef EXEC_BACKEND
{ {
SysloggerStartupData *slsdata = (SysloggerStartupData *) startup_data; const SysloggerStartupData *slsdata = startup_data;
Assert(startup_data_len == sizeof(*slsdata)); Assert(startup_data_len == sizeof(*slsdata));
syslogFile = syslogger_fdopen(slsdata->syslogFile); syslogFile = syslogger_fdopen(slsdata->syslogFile);
@ -699,7 +699,7 @@ SysLogger_Start(int child_slot)
startup_data.csvlogFile = syslogger_fdget(csvlogFile); startup_data.csvlogFile = syslogger_fdget(csvlogFile);
startup_data.jsonlogFile = syslogger_fdget(jsonlogFile); startup_data.jsonlogFile = syslogger_fdget(jsonlogFile);
sysloggerPid = postmaster_child_launch(B_LOGGER, child_slot, sysloggerPid = postmaster_child_launch(B_LOGGER, child_slot,
(char *) &startup_data, sizeof(startup_data), NULL); &startup_data, sizeof(startup_data), NULL);
#else #else
sysloggerPid = postmaster_child_launch(B_LOGGER, child_slot, sysloggerPid = postmaster_child_launch(B_LOGGER, child_slot,
NULL, 0, NULL); NULL, 0, NULL);

View File

@ -208,7 +208,7 @@ WalSummarizerShmemInit(void)
* Entry point for walsummarizer process. * Entry point for walsummarizer process.
*/ */
void void
WalSummarizerMain(char *startup_data, size_t startup_data_len) WalSummarizerMain(const void *startup_data, size_t startup_data_len)
{ {
sigjmp_buf local_sigjmp_buf; sigjmp_buf local_sigjmp_buf;
MemoryContext context; MemoryContext context;

View File

@ -84,7 +84,7 @@ int WalWriterFlushAfter = DEFAULT_WAL_WRITER_FLUSH_AFTER;
* basic execution environment, but not enabled signals yet. * basic execution environment, but not enabled signals yet.
*/ */
void void
WalWriterMain(char *startup_data, size_t startup_data_len) WalWriterMain(const void *startup_data, size_t startup_data_len)
{ {
sigjmp_buf local_sigjmp_buf; sigjmp_buf local_sigjmp_buf;
MemoryContext walwriter_context; MemoryContext walwriter_context;

View File

@ -1326,7 +1326,7 @@ reset_syncing_flag()
* information periodically in order to create and sync the slots. * information periodically in order to create and sync the slots.
*/ */
void void
ReplSlotSyncWorkerMain(char *startup_data, size_t startup_data_len) ReplSlotSyncWorkerMain(const void *startup_data, size_t startup_data_len)
{ {
WalReceiverConn *wrconn = NULL; WalReceiverConn *wrconn = NULL;
char *dbname; char *dbname;

View File

@ -180,7 +180,7 @@ ProcessWalRcvInterrupts(void)
/* Main entry point for walreceiver process */ /* Main entry point for walreceiver process */
void void
WalReceiverMain(char *startup_data, size_t startup_data_len) WalReceiverMain(const void *startup_data, size_t startup_data_len)
{ {
char conninfo[MAXCONNINFO]; char conninfo[MAXCONNINFO];
char *tmp_conninfo; char *tmp_conninfo;

View File

@ -56,9 +56,9 @@ static void StartupPacketTimeoutHandler(void);
* client, and start the main processing loop. * client, and start the main processing loop.
*/ */
void void
BackendMain(char *startup_data, size_t startup_data_len) BackendMain(const void *startup_data, size_t startup_data_len)
{ {
BackendStartupData *bsdata = (BackendStartupData *) startup_data; const BackendStartupData *bsdata = startup_data;
Assert(startup_data_len == sizeof(BackendStartupData)); Assert(startup_data_len == sizeof(BackendStartupData));
Assert(MyClientSocket != NULL); Assert(MyClientSocket != NULL);

View File

@ -58,8 +58,8 @@ extern void autovac_init(void);
/* called from postmaster when a worker could not be forked */ /* called from postmaster when a worker could not be forked */
extern void AutoVacWorkerFailed(void); extern void AutoVacWorkerFailed(void);
extern void AutoVacLauncherMain(char *startup_data, size_t startup_data_len) pg_attribute_noreturn(); extern void AutoVacLauncherMain(const void *startup_data, size_t startup_data_len) pg_attribute_noreturn();
extern void AutoVacWorkerMain(char *startup_data, size_t startup_data_len) pg_attribute_noreturn(); extern void AutoVacWorkerMain(const void *startup_data, size_t startup_data_len) pg_attribute_noreturn();
extern bool AutoVacuumRequestWork(AutoVacuumWorkItemType type, extern bool AutoVacuumRequestWork(AutoVacuumWorkItemType type,
Oid relationId, BlockNumber blkno); Oid relationId, BlockNumber blkno);

View File

@ -52,6 +52,6 @@ extern void ForgetUnstartedBackgroundWorkers(void);
extern void ResetBackgroundWorkerCrashTimes(void); extern void ResetBackgroundWorkerCrashTimes(void);
/* Entry point for background worker processes */ /* Entry point for background worker processes */
extern void BackgroundWorkerMain(char *startup_data, size_t startup_data_len) pg_attribute_noreturn(); extern void BackgroundWorkerMain(const void *startup_data, size_t startup_data_len) pg_attribute_noreturn();
#endif /* BGWORKER_INTERNALS_H */ #endif /* BGWORKER_INTERNALS_H */

View File

@ -27,8 +27,8 @@ extern PGDLLIMPORT int CheckPointTimeout;
extern PGDLLIMPORT int CheckPointWarning; extern PGDLLIMPORT int CheckPointWarning;
extern PGDLLIMPORT double CheckPointCompletionTarget; extern PGDLLIMPORT double CheckPointCompletionTarget;
extern void BackgroundWriterMain(char *startup_data, size_t startup_data_len) pg_attribute_noreturn(); extern void BackgroundWriterMain(const void *startup_data, size_t startup_data_len) pg_attribute_noreturn();
extern void CheckpointerMain(char *startup_data, size_t startup_data_len) pg_attribute_noreturn(); extern void CheckpointerMain(const void *startup_data, size_t startup_data_len) pg_attribute_noreturn();
extern void RequestCheckpoint(int flags); extern void RequestCheckpoint(int flags);
extern void CheckpointWriteDelay(int flags, double progress); extern void CheckpointWriteDelay(int flags, double progress);

View File

@ -29,7 +29,7 @@
extern Size PgArchShmemSize(void); extern Size PgArchShmemSize(void);
extern void PgArchShmemInit(void); extern void PgArchShmemInit(void);
extern bool PgArchCanRestart(void); extern bool PgArchCanRestart(void);
extern void PgArchiverMain(char *startup_data, size_t startup_data_len) pg_attribute_noreturn(); extern void PgArchiverMain(const void *startup_data, size_t startup_data_len) pg_attribute_noreturn();
extern void PgArchWakeup(void); extern void PgArchWakeup(void);
extern void PgArchForceDirScan(void); extern void PgArchForceDirScan(void);

View File

@ -109,7 +109,7 @@ extern PGDLLIMPORT struct ClientSocket *MyClientSocket;
/* prototypes for functions in launch_backend.c */ /* prototypes for functions in launch_backend.c */
extern pid_t postmaster_child_launch(BackendType child_type, extern pid_t postmaster_child_launch(BackendType child_type,
int child_slot, int child_slot,
char *startup_data, const void *startup_data,
size_t startup_data_len, size_t startup_data_len,
struct ClientSocket *client_sock); struct ClientSocket *client_sock);
const char *PostmasterChildName(BackendType child_type); const char *PostmasterChildName(BackendType child_type);

View File

@ -26,7 +26,7 @@
extern PGDLLIMPORT int log_startup_progress_interval; extern PGDLLIMPORT int log_startup_progress_interval;
extern void HandleStartupProcInterrupts(void); extern void HandleStartupProcInterrupts(void);
extern void StartupProcessMain(char *startup_data, size_t startup_data_len) pg_attribute_noreturn(); extern void StartupProcessMain(const void *startup_data, size_t startup_data_len) pg_attribute_noreturn();
extern void PreRestoreCommand(void); extern void PreRestoreCommand(void);
extern void PostRestoreCommand(void); extern void PostRestoreCommand(void);
extern bool IsPromoteSignaled(void); extern bool IsPromoteSignaled(void);

View File

@ -90,7 +90,7 @@ extern int SysLogger_Start(int child_slot);
extern void write_syslogger_file(const char *buffer, int count, int destination); extern void write_syslogger_file(const char *buffer, int count, int destination);
extern void SysLoggerMain(char *startup_data, size_t startup_data_len) pg_attribute_noreturn(); extern void SysLoggerMain(const void *startup_data, size_t startup_data_len) pg_attribute_noreturn();
extern bool CheckLogrotateSignal(void); extern bool CheckLogrotateSignal(void);
extern void RemoveLogrotateSignalFiles(void); extern void RemoveLogrotateSignalFiles(void);

View File

@ -21,7 +21,7 @@ extern PGDLLIMPORT int wal_summary_keep_time;
extern Size WalSummarizerShmemSize(void); extern Size WalSummarizerShmemSize(void);
extern void WalSummarizerShmemInit(void); extern void WalSummarizerShmemInit(void);
extern void WalSummarizerMain(char *startup_data, size_t startup_data_len) pg_attribute_noreturn(); extern void WalSummarizerMain(const void *startup_data, size_t startup_data_len) pg_attribute_noreturn();
extern void GetWalSummarizerState(TimeLineID *summarized_tli, extern void GetWalSummarizerState(TimeLineID *summarized_tli,
XLogRecPtr *summarized_lsn, XLogRecPtr *summarized_lsn,

View File

@ -18,6 +18,6 @@
extern PGDLLIMPORT int WalWriterDelay; extern PGDLLIMPORT int WalWriterDelay;
extern PGDLLIMPORT int WalWriterFlushAfter; extern PGDLLIMPORT int WalWriterFlushAfter;
extern void WalWriterMain(char *startup_data, size_t startup_data_len) pg_attribute_noreturn(); extern void WalWriterMain(const void *startup_data, size_t startup_data_len) pg_attribute_noreturn();
#endif /* _WALWRITER_H */ #endif /* _WALWRITER_H */

View File

@ -26,7 +26,7 @@ extern PGDLLIMPORT char *PrimarySlotName;
extern char *CheckAndGetDbnameFromConninfo(void); extern char *CheckAndGetDbnameFromConninfo(void);
extern bool ValidateSlotSyncParams(int elevel); extern bool ValidateSlotSyncParams(int elevel);
extern void ReplSlotSyncWorkerMain(char *startup_data, size_t startup_data_len) pg_attribute_noreturn(); extern void ReplSlotSyncWorkerMain(const void *startup_data, size_t startup_data_len) pg_attribute_noreturn();
extern void ShutDownSlotSync(void); extern void ShutDownSlotSync(void);
extern bool SlotSyncWorkerCanRestart(void); extern bool SlotSyncWorkerCanRestart(void);

View File

@ -486,7 +486,7 @@ walrcv_clear_result(WalRcvExecResult *walres)
} }
/* prototypes for functions in walreceiver.c */ /* prototypes for functions in walreceiver.c */
extern void WalReceiverMain(char *startup_data, size_t startup_data_len) pg_attribute_noreturn(); extern void WalReceiverMain(const void *startup_data, size_t startup_data_len) pg_attribute_noreturn();
extern void ProcessWalRcvInterrupts(void); extern void ProcessWalRcvInterrupts(void);
extern void WalRcvForceReply(void); extern void WalRcvForceReply(void);

View File

@ -39,6 +39,6 @@ typedef struct BackendStartupData
CAC_state canAcceptConnections; CAC_state canAcceptConnections;
} BackendStartupData; } BackendStartupData;
extern void BackendMain(char *startup_data, size_t startup_data_len) pg_attribute_noreturn(); extern void BackendMain(const void *startup_data, size_t startup_data_len) pg_attribute_noreturn();
#endif /* BACKEND_STARTUP_H */ #endif /* BACKEND_STARTUP_H */