backend launchers void * arguments for binary data
authorPeter Eisentraut <peter@eisentraut.org>
Fri, 21 Feb 2025 07:03:33 +0000 (08:03 +0100)
committerPeter Eisentraut <peter@eisentraut.org>
Fri, 21 Feb 2025 07:03:33 +0000 (08:03 +0100)
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

26 files changed:
src/backend/postmaster/autovacuum.c
src/backend/postmaster/bgworker.c
src/backend/postmaster/bgwriter.c
src/backend/postmaster/checkpointer.c
src/backend/postmaster/launch_backend.c
src/backend/postmaster/pgarch.c
src/backend/postmaster/postmaster.c
src/backend/postmaster/startup.c
src/backend/postmaster/syslogger.c
src/backend/postmaster/walsummarizer.c
src/backend/postmaster/walwriter.c
src/backend/replication/logical/slotsync.c
src/backend/replication/walreceiver.c
src/backend/tcop/backend_startup.c
src/include/postmaster/autovacuum.h
src/include/postmaster/bgworker_internals.h
src/include/postmaster/bgwriter.h
src/include/postmaster/pgarch.h
src/include/postmaster/postmaster.h
src/include/postmaster/startup.h
src/include/postmaster/syslogger.h
src/include/postmaster/walsummarizer.h
src/include/postmaster/walwriter.h
src/include/replication/slotsync.h
src/include/replication/walreceiver.h
src/include/tcop/backend_startup.h

index ade2708b59e93a3b828e8ff999e08be9f4e5ec84..ddb303f5201b58b30535d167e073e1e5c839e693 100644 (file)
@@ -364,7 +364,7 @@ static void check_av_worker_gucs(void);
  * Main entry point for the autovacuum launcher process.
  */
 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;
 
@@ -1371,7 +1371,7 @@ avl_sigusr2_handler(SIGNAL_ARGS)
  * Main entry point for autovacuum worker processes.
  */
 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;
    Oid         dbid;
index b288915cec8a4fc0c23c8e94dd7b137ac1ecbb99..116ddf7b835f16dcd0a2fc2de871729c48421f63 100644 (file)
@@ -714,7 +714,7 @@ bgworker_die(SIGNAL_ARGS)
  * Main entry point for background worker processes.
  */
 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;
    BackgroundWorker *worker;
index 3eff5dc6f0eb58957d889251a280f9fc3cdd8d7b..64524d1831bc9d38991d8abdf160e5a3fffdc6cc 100644 (file)
@@ -84,7 +84,7 @@ static XLogRecPtr last_snapshot_lsn = InvalidXLogRecPtr;
  * basic execution environment, but not enabled signals yet.
  */
 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;
    MemoryContext bgwriter_context;
index b94f9cdff21c4ff0eba12a1af10a4736eec7f29d..7acbbd3e267fa9e7296c9815f13791da8dc596f9 100644 (file)
@@ -175,7 +175,7 @@ static void ReqShutdownXLOG(SIGNAL_ARGS);
  * basic execution environment, but not enabled signals yet.
  */
 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;
    MemoryContext checkpointer_context;
index a97a1eda6da76b3cc0407694e07037a68c89d0b9..47375e5bfaa12befea91313053ac3063008fd9a1 100644 (file)
@@ -149,7 +149,7 @@ typedef struct
 
 #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 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
                                   HANDLE childProcess, pid_t childPid,
 #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,
-                              char *startup_data, size_t startup_data_len,
+                              const void *startup_data, size_t startup_data_len,
                               ClientSocket *client_sock);
 
 #endif                         /* EXEC_BACKEND */
@@ -171,7 +171,7 @@ static pid_t internal_forkexec(const char *child_kind, int child_slot,
 typedef struct
 {
    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;
 } child_process_kind;
 
@@ -225,7 +225,7 @@ PostmasterChildName(BackendType child_type)
  */
 pid_t
 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)
 {
    pid_t       pid;
@@ -289,7 +289,7 @@ postmaster_child_launch(BackendType child_type, int child_slot,
  */
 static pid_t
 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;
    pid_t       pid;
@@ -399,7 +399,7 @@ 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, ClientSocket *client_sock)
+                 const void *startup_data, size_t startup_data_len, ClientSocket *client_sock)
 {
    int         retry_count = 0;
    STARTUPINFO si;
@@ -581,7 +581,7 @@ retry:
 void
 SubPostmasterMain(int argc, char *argv[])
 {
-   char       *startup_data;
+   void       *startup_data;
    size_t      startup_data_len;
    char       *child_kind;
    BackendType child_type;
@@ -699,7 +699,7 @@ save_backend_variables(BackendParameters *param,
 #ifdef WIN32
                       HANDLE childProcess, pid_t childPid,
 #endif
-                      char *startup_data, size_t startup_data_len)
+                      const void *startup_data, size_t startup_data_len)
 {
    if (client_sock)
        memcpy(&param->client_sock, client_sock, sizeof(ClientSocket));
@@ -867,7 +867,7 @@ read_inheritable_socket(SOCKET *dest, InheritableSocket *src)
 #endif
 
 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;
 
index 12ee815a6262353d32c445fe914e7fb4d9322e41..e6cd78679ce4161a9dfc4aa8ae3e54977a781390 100644 (file)
@@ -214,7 +214,7 @@ PgArchCanRestart(void)
 
 /* Main entry point for archiver process */
 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);
 
index bb22b13adef8760f6a08b94a3bee82105b3e62f0..5dd3b6a4fd4965b57d7cf79658e6cedd04016265 100644 (file)
@@ -3517,7 +3517,7 @@ BackendStartup(ClientSocket *client_sock)
    bn->bgworker_notify = false;
 
    pid = postmaster_child_launch(bn->bkend_type, bn->child_slot,
-                                 (char *) &startup_data, sizeof(startup_data),
+                                 &startup_data, sizeof(startup_data),
                                  client_sock);
    if (pid < 0)
    {
@@ -4080,7 +4080,7 @@ StartBackgroundWorker(RegisteredBgWorker *rw)
                             rw->rw_worker.bgw_name)));
 
    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)
    {
        /* in postmaster, fork failed ... */
index 59d213031b3c2d0a1dff047f6ba15705ac126321..88eab3d0baf20a4729a77bca1e2df297b3937473 100644 (file)
@@ -213,7 +213,7 @@ StartupProcExit(int code, Datum arg)
  * ----------------------------------
  */
 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);
 
index 7e9b3f2a0fd670b4d83be31029d3c74b66ddb77f..50c2edec1f61174a6990d5e64b079b0735e328b5 100644 (file)
@@ -162,7 +162,7 @@ typedef struct
  * argc/argv parameters are valid only in EXEC_BACKEND case.
  */
 void
-SysLoggerMain(char *startup_data, size_t startup_data_len)
+SysLoggerMain(const void *startup_data, size_t startup_data_len)
 {
 #ifndef WIN32
    char        logbuffer[READ_BUF_SIZE];
@@ -183,7 +183,7 @@ SysLoggerMain(char *startup_data, size_t startup_data_len)
     */
 #ifdef EXEC_BACKEND
    {
-       SysloggerStartupData *slsdata = (SysloggerStartupData *) startup_data;
+       const SysloggerStartupData *slsdata = startup_data;
 
        Assert(startup_data_len == sizeof(*slsdata));
        syslogFile = syslogger_fdopen(slsdata->syslogFile);
@@ -699,7 +699,7 @@ SysLogger_Start(int child_slot)
    startup_data.csvlogFile = syslogger_fdget(csvlogFile);
    startup_data.jsonlogFile = syslogger_fdget(jsonlogFile);
    sysloggerPid = postmaster_child_launch(B_LOGGER, child_slot,
-                                          (char *) &startup_data, sizeof(startup_data), NULL);
+                                          &startup_data, sizeof(startup_data), NULL);
 #else
    sysloggerPid = postmaster_child_launch(B_LOGGER, child_slot,
                                           NULL, 0, NULL);
index ffbf0439358664db363ddaf4f5ff441a583f0b12..f4d61c1f3bb88b8f0acf6180b98251e082ea42c0 100644 (file)
@@ -208,7 +208,7 @@ WalSummarizerShmemInit(void)
  * Entry point for walsummarizer process.
  */
 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;
    MemoryContext context;
index df4f76349698326d81319e5240145a19ea550bdd..15a71ad684da8c7eee2b453177b4990c86e95685 100644 (file)
@@ -84,7 +84,7 @@ int           WalWriterFlushAfter = DEFAULT_WAL_WRITER_FLUSH_AFTER;
  * basic execution environment, but not enabled signals yet.
  */
 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;
    MemoryContext walwriter_context;
index 987857b9491c7d058957887b14603e6d5904d07e..2c0a7439be41d2953704b72d93c3274829391b5b 100644 (file)
@@ -1326,7 +1326,7 @@ reset_syncing_flag()
  * information periodically in order to create and sync the slots.
  */
 void
-ReplSlotSyncWorkerMain(char *startup_data, size_t startup_data_len)
+ReplSlotSyncWorkerMain(const void *startup_data, size_t startup_data_len)
 {
    WalReceiverConn *wrconn = NULL;
    char       *dbname;
index bd09262e27d198bc528902d2f7f62cd076318849..82f7302ff9fd560362528077cb2933b14cc73258 100644 (file)
@@ -180,7 +180,7 @@ ProcessWalRcvInterrupts(void)
 
 /* Main entry point for walreceiver process */
 void
-WalReceiverMain(char *startup_data, size_t startup_data_len)
+WalReceiverMain(const void *startup_data, size_t startup_data_len)
 {
    char        conninfo[MAXCONNINFO];
    char       *tmp_conninfo;
index bd9640d0eb181d29a31252ef787572ee2f169292..9ee738eb1e0500b209bba48ee5a8d3829bbdf614 100644 (file)
@@ -56,9 +56,9 @@ static void StartupPacketTimeoutHandler(void);
  * client, and start the main processing loop.
  */
 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(MyClientSocket != NULL);
index 06d4a593575882f0cc24836293b85a27824cb2e6..6a95e5f55bdfa70daf0cf74595ae2a114f795ac6 100644 (file)
@@ -58,8 +58,8 @@ extern void autovac_init(void);
 /* called from postmaster when a worker could not be forked */
 extern void AutoVacWorkerFailed(void);
 
-extern void AutoVacLauncherMain(char *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 AutoVacLauncherMain(const void *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,
                                  Oid relationId, BlockNumber blkno);
index 092b1610663142fe0606bedf2eb8b9f7461b2743..29e6f44cf087e0fc7e9f9025ff9718ff5b1e2ecf 100644 (file)
@@ -52,6 +52,6 @@ extern void ForgetUnstartedBackgroundWorkers(void);
 extern void ResetBackgroundWorkerCrashTimes(void);
 
 /* 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 */
index 2d5854e6879ea843d1b84ff2ccd9ac20c740bbf9..4fd717169f0660a75f3cebccc152f40a1ce9d0ba 100644 (file)
@@ -27,8 +27,8 @@ extern PGDLLIMPORT int CheckPointTimeout;
 extern PGDLLIMPORT int CheckPointWarning;
 extern PGDLLIMPORT double CheckPointCompletionTarget;
 
-extern void BackgroundWriterMain(char *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 BackgroundWriterMain(const void *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 CheckpointWriteDelay(int flags, double progress);
index 8fc6bfeec1b86156268f541357e0a070734eaae1..a32d78feb27a1980bfc7a74eaaee978ee6ca66fc 100644 (file)
@@ -29,7 +29,7 @@
 extern Size PgArchShmemSize(void);
 extern void PgArchShmemInit(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 PgArchForceDirScan(void);
 
index 188a06e2379849732b39306db2a0191dc6155c22..d8a9f14b3b89222b61bfe37c5c80ba4e42c81cbd 100644 (file)
@@ -109,7 +109,7 @@ extern PGDLLIMPORT struct ClientSocket *MyClientSocket;
 /* prototypes for functions in launch_backend.c */
 extern pid_t postmaster_child_launch(BackendType child_type,
                                     int child_slot,
-                                    char *startup_data,
+                                    const void *startup_data,
                                     size_t startup_data_len,
                                     struct ClientSocket *client_sock);
 const char *PostmasterChildName(BackendType child_type);
index 736c97d121a92d2e6f01515c62dac23f2b1eed90..ae0f6347fc048d29d792e3cc698af937eb23fa6f 100644 (file)
@@ -26,7 +26,7 @@
 extern PGDLLIMPORT int log_startup_progress_interval;
 
 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 PostRestoreCommand(void);
 extern bool IsPromoteSignaled(void);
index e92d8531478b01b4ed6513a70c32ea03c5fe6d80..197d8e43fdd1f09b48f57297773a91364cfe213c 100644 (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 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 void RemoveLogrotateSignalFiles(void);
index bfe86663ccb85853ef94da479b1b83cd15d00e37..e1086d02c8bfa0942cd3a40cc6d68189cd1ec541 100644 (file)
@@ -21,7 +21,7 @@ extern PGDLLIMPORT int wal_summary_keep_time;
 
 extern Size WalSummarizerShmemSize(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,
                                  XLogRecPtr *summarized_lsn,
index 9fc3c665774182fabcd235c453cb5d0d8514b4fa..ea8c22b174fe82b70880aabf66632de4e7f78ec3 100644 (file)
@@ -18,6 +18,6 @@
 extern PGDLLIMPORT int WalWriterDelay;
 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 */
index 3fad27f0a631053784c2301b34ad6f10bdfdf405..6cde7f81cec6c41dea2d4bdfaccaa717279e625c 100644 (file)
@@ -26,7 +26,7 @@ extern PGDLLIMPORT char *PrimarySlotName;
 extern char *CheckAndGetDbnameFromConninfo(void);
 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 bool SlotSyncWorkerCanRestart(void);
index 204419bd8a35528086d2027758d12f9adb9ec94c..992be93cce84afffcb8d3e3bc7bfcae8df422740 100644 (file)
@@ -486,7 +486,7 @@ walrcv_clear_result(WalRcvExecResult *walres)
 }
 
 /* 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 WalRcvForceReply(void);
 
index 01baf4aad75699e7220580db61f1c29de910379c..7328561120324973c45aa20b0f432a2022b6be64 100644 (file)
@@ -39,6 +39,6 @@ typedef struct BackendStartupData
    CAC_state   canAcceptConnections;
 } 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 */