]> granicus.if.org Git - postgresql/commitdiff
Unify calling conventions for postgres/postmaster sub-main functions
authorPeter Eisentraut <peter_e@gmx.net>
Mon, 25 Jun 2012 18:25:26 +0000 (21:25 +0300)
committerPeter Eisentraut <peter_e@gmx.net>
Mon, 25 Jun 2012 18:30:12 +0000 (21:30 +0300)
There was a wild mix of calling conventions: Some were declared to
return void and didn't return, some returned an int exit code, some
claimed to return an exit code, which the callers checked, but
actually never returned, and so on.

Now all of these functions are declared to return void and decorated
with attribute noreturn and don't return.  That's easiest, and most
code already worked that way.

23 files changed:
src/backend/main/main.c
src/backend/postmaster/autovacuum.c
src/backend/postmaster/pgarch.c
src/backend/postmaster/pgstat.c
src/backend/postmaster/postmaster.c
src/backend/postmaster/syslogger.c
src/backend/replication/walsender.c
src/backend/tcop/postgres.c
src/backend/utils/misc/help_config.c
src/include/bootstrap/bootstrap.h
src/include/pgstat.h
src/include/postmaster/autovacuum.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/walwriter.h
src/include/replication/walreceiver.h
src/include/replication/walsender.h
src/include/storage/ipc.h
src/include/tcop/tcopprot.h
src/include/utils/help_config.h

index c7d48e95ad6c3eeadf3e23aabdd162c64ea31334..33c5a0a4e645624515016397da0011423d993c70 100644 (file)
@@ -173,7 +173,7 @@ main(int argc, char *argv[])
 
 #ifdef EXEC_BACKEND
        if (argc > 1 && strncmp(argv[1], "--fork", 6) == 0)
-               exit(SubPostmasterMain(argc, argv));
+               SubPostmasterMain(argc, argv); /* does not return */
 #endif
 
 #ifdef WIN32
@@ -189,14 +189,13 @@ main(int argc, char *argv[])
 
        if (argc > 1 && strcmp(argv[1], "--boot") == 0)
                AuxiliaryProcessMain(argc, argv);               /* does not return */
-
-       if (argc > 1 && strcmp(argv[1], "--describe-config") == 0)
-               exit(GucInfoMain());
-
-       if (argc > 1 && strcmp(argv[1], "--single") == 0)
-               exit(PostgresMain(argc, argv, get_current_username(progname)));
-
-       exit(PostmasterMain(argc, argv));
+       else if (argc > 1 && strcmp(argv[1], "--describe-config") == 0)
+               GucInfoMain();                  /* does not return */
+       else if (argc > 1 && strcmp(argv[1], "--single") == 0)
+               PostgresMain(argc, argv, get_current_username(progname)); /* does not return */
+       else
+               PostmasterMain(argc, argv); /* does not return */
+       abort();                                                /* should not get here */
 }
 
 
index 1cfac9e80babacd607a86238bb94846da76ecc84..dade5cc3c051c855de2d2800a4db74f0907e41bb 100644 (file)
@@ -269,8 +269,8 @@ int                 AutovacuumLauncherPid = 0;
 static pid_t avlauncher_forkexec(void);
 static pid_t avworker_forkexec(void);
 #endif
-NON_EXEC_STATIC void AutoVacWorkerMain(int argc, char *argv[]);
-NON_EXEC_STATIC void AutoVacLauncherMain(int argc, char *argv[]);
+NON_EXEC_STATIC void AutoVacWorkerMain(int argc, char *argv[]) __attribute__((noreturn));
+NON_EXEC_STATIC void AutoVacLauncherMain(int argc, char *argv[]) __attribute__((noreturn));
 
 static Oid     do_start_worker(void);
 static void launcher_determine_sleep(bool canlaunch, bool recursing,
index 5c43cdde653b7e04f506e20738b1ee9e6293a531..d5d8be0587d663631e27886da66cdae71f8448db 100644 (file)
@@ -101,7 +101,7 @@ static Latch mainloop_latch;
 static pid_t pgarch_forkexec(void);
 #endif
 
-NON_EXEC_STATIC void PgArchiverMain(int argc, char *argv[]);
+NON_EXEC_STATIC void PgArchiverMain(int argc, char *argv[]) __attribute__((noreturn));
 static void pgarch_exit(SIGNAL_ARGS);
 static void ArchSigHupHandler(SIGNAL_ARGS);
 static void ArchSigTermHandler(SIGNAL_ARGS);
index 243dc8bc53e08958f5a8cc798a2133dd45d77668..2371cd2ff9b01d2a6df5f0c421567f63f7decef5 100644 (file)
@@ -243,7 +243,7 @@ static instr_time total_func_time;
 static pid_t pgstat_forkexec(void);
 #endif
 
-NON_EXEC_STATIC void PgstatCollectorMain(int argc, char *argv[]);
+NON_EXEC_STATIC void PgstatCollectorMain(int argc, char *argv[]) __attribute__((noreturn));
 static void pgstat_exit(SIGNAL_ARGS);
 static void pgstat_beshutdown_hook(int code, Datum arg);
 static void pgstat_sighup_handler(SIGNAL_ARGS);
index eeea933b1923dc06a6ab2ebcd39cd6d5359c4696..913734fbd006bc7f10e3310b37ddc53480aae09c 100644 (file)
@@ -343,8 +343,8 @@ static void LogChildExit(int lev, const char *procname,
                         int pid, int exitstatus);
 static void PostmasterStateMachine(void);
 static void BackendInitialize(Port *port);
-static int     BackendRun(Port *port);
-static void ExitPostmaster(int status);
+static void BackendRun(Port *port) __attribute__((noreturn));
+static void ExitPostmaster(int status) __attribute__((noreturn));
 static int     ServerLoop(void);
 static int     BackendStartup(Port *port);
 static int     ProcessStartupPacket(Port *port, bool SSLdone);
@@ -491,7 +491,7 @@ HANDLE              PostmasterHandle;
 /*
  * Postmaster main entry point
  */
-int
+void
 PostmasterMain(int argc, char *argv[])
 {
        int                     opt;
@@ -1125,7 +1125,7 @@ PostmasterMain(int argc, char *argv[])
         */
        ExitPostmaster(status != STATUS_OK);
 
-       return 0;                                       /* not reached */
+       abort();                                        /* not reached */
 }
 
 
@@ -3295,7 +3295,7 @@ BackendStartup(Port *port)
                BackendInitialize(port);
 
                /* And run the backend */
-               proc_exit(BackendRun(port));
+               BackendRun(port);
        }
 #endif   /* EXEC_BACKEND */
 
@@ -3539,7 +3539,7 @@ BackendInitialize(Port *port)
  *             Shouldn't return at all.
  *             If PostgresMain() fails, return status.
  */
-static int
+static void
 BackendRun(Port *port)
 {
        char      **av;
@@ -3610,7 +3610,7 @@ BackendRun(Port *port)
         */
        MemoryContextSwitchTo(TopMemoryContext);
 
-       return (PostgresMain(ac, av, port->user_name));
+       PostgresMain(ac, av, port->user_name);
 }
 
 
@@ -3960,7 +3960,7 @@ internal_forkexec(int argc, char *argv[], Port *port)
  * have been inherited by fork() on Unix.  Remaining arguments go to the
  * subprocess FooMain() routine.
  */
-int
+void
 SubPostmasterMain(int argc, char *argv[])
 {
        Port            port;
@@ -4111,7 +4111,7 @@ SubPostmasterMain(int argc, char *argv[])
                CreateSharedMemoryAndSemaphores(false, 0);
 
                /* And run the backend */
-               proc_exit(BackendRun(&port));
+               BackendRun(&port);              /* does not return */
        }
        if (strcmp(argv[1], "--forkboot") == 0)
        {
@@ -4127,8 +4127,7 @@ SubPostmasterMain(int argc, char *argv[])
                /* Attach process to shared data structures */
                CreateSharedMemoryAndSemaphores(false, 0);
 
-               AuxiliaryProcessMain(argc - 2, argv + 2);
-               proc_exit(0);
+               AuxiliaryProcessMain(argc - 2, argv + 2); /* does not return */
        }
        if (strcmp(argv[1], "--forkavlauncher") == 0)
        {
@@ -4144,8 +4143,7 @@ SubPostmasterMain(int argc, char *argv[])
                /* Attach process to shared data structures */
                CreateSharedMemoryAndSemaphores(false, 0);
 
-               AutoVacLauncherMain(argc - 2, argv + 2);
-               proc_exit(0);
+               AutoVacLauncherMain(argc - 2, argv + 2); /* does not return */
        }
        if (strcmp(argv[1], "--forkavworker") == 0)
        {
@@ -4161,8 +4159,7 @@ SubPostmasterMain(int argc, char *argv[])
                /* Attach process to shared data structures */
                CreateSharedMemoryAndSemaphores(false, 0);
 
-               AutoVacWorkerMain(argc - 2, argv + 2);
-               proc_exit(0);
+               AutoVacWorkerMain(argc - 2, argv + 2); /* does not return */
        }
        if (strcmp(argv[1], "--forkarch") == 0)
        {
@@ -4171,8 +4168,7 @@ SubPostmasterMain(int argc, char *argv[])
 
                /* Do not want to attach to shared memory */
 
-               PgArchiverMain(argc, argv);
-               proc_exit(0);
+               PgArchiverMain(argc, argv); /* does not return */
        }
        if (strcmp(argv[1], "--forkcol") == 0)
        {
@@ -4181,8 +4177,7 @@ SubPostmasterMain(int argc, char *argv[])
 
                /* Do not want to attach to shared memory */
 
-               PgstatCollectorMain(argc, argv);
-               proc_exit(0);
+               PgstatCollectorMain(argc, argv); /* does not return */
        }
        if (strcmp(argv[1], "--forklog") == 0)
        {
@@ -4191,11 +4186,10 @@ SubPostmasterMain(int argc, char *argv[])
 
                /* Do not want to attach to shared memory */
 
-               SysLoggerMain(argc, argv);
-               proc_exit(0);
+               SysLoggerMain(argc, argv); /* does not return */
        }
 
-       return 1;                                       /* shouldn't get here */
+       abort();                                        /* shouldn't get here */
 }
 #endif   /* EXEC_BACKEND */
 
index 25d095b158de34ca390f443d0a8e2f3fe1ee2d61..919cc49fa945f27642f8723fefec486cc6657478 100644 (file)
@@ -139,6 +139,7 @@ static volatile sig_atomic_t rotation_requested = false;
 static pid_t syslogger_forkexec(void);
 static void syslogger_parseArgs(int argc, char *argv[]);
 #endif
+NON_EXEC_STATIC void SysLoggerMain(int argc, char *argv[]) __attribute__((noreturn));
 static void process_pipe_input(char *logbuffer, int *bytes_in_logbuffer);
 static void flush_pipe_input(char *logbuffer, int *bytes_in_logbuffer);
 static void open_csvlogfile(void);
index d5cb778f7e6fc9a1a1b1b06781af0eb51d022b90..616d4e73e3b66b64a60de6fecc787ef56c0ecaeb 100644 (file)
@@ -120,7 +120,7 @@ static void WalSndLastCycleHandler(SIGNAL_ARGS);
 
 /* Prototypes for private functions */
 static bool HandleReplicationCommand(const char *cmd_string);
-static int     WalSndLoop(void);
+static void WalSndLoop(void) __attribute__((noreturn));
 static void InitWalSnd(void);
 static void WalSndHandshake(void);
 static void WalSndKill(int code, Datum arg);
@@ -135,7 +135,7 @@ static void WalSndKeepalive(char *msgbuf);
 
 
 /* Main entry point for walsender process */
-int
+void
 WalSenderMain(void)
 {
        MemoryContext walsnd_context;
@@ -192,7 +192,7 @@ WalSenderMain(void)
        SyncRepInitConfig();
 
        /* Main loop of walsender */
-       return WalSndLoop();
+       WalSndLoop();
 }
 
 /*
@@ -706,7 +706,7 @@ ProcessStandbyHSFeedbackMessage(void)
 }
 
 /* Main loop of walsender process */
-static int
+static void
 WalSndLoop(void)
 {
        char       *output_message;
@@ -882,7 +882,7 @@ WalSndLoop(void)
                whereToSendOutput = DestNone;
 
        proc_exit(0);
-       return 1;                                       /* keep the compiler quiet */
+       abort();                                        /* keep the compiler quiet */
 }
 
 /* Initialize a per-walsender data structure for this walsender process */
index 51b6df54f4c1afe6b94012aea0bcda2b46ff7719..9a5438f18afa707d385177fb136f4356863e542a 100644 (file)
@@ -3507,7 +3507,7 @@ process_postgres_switches(int argc, char *argv[], GucContext ctx)
  * for the session.
  * ----------------------------------------------------------------
  */
-int
+void
 PostgresMain(int argc, char *argv[], const char *username)
 {
        const char *dbname;
@@ -3721,7 +3721,10 @@ PostgresMain(int argc, char *argv[], const char *username)
 
        /* If this is a WAL sender process, we're done with initialization. */
        if (am_walsender)
-               proc_exit(WalSenderMain());
+       {
+               WalSenderMain();                /* does not return */
+               abort();
+       }
 
        /*
         * process any libraries that should be preloaded at backend start (this
@@ -4199,7 +4202,7 @@ PostgresMain(int argc, char *argv[], const char *username)
        /* can't get here because the above loop never exits */
        Assert(false);
 
-       return 1;                                       /* keep compiler quiet */
+       abort();                                        /* keep compiler quiet */
 }
 
 
index 5f772f967179dffe23839afea4a4a886586a7dc9..386ec98a32f8f1660faef4c0fbf8b91ee2c7d3fb 100644 (file)
@@ -43,7 +43,7 @@ static void printMixedStruct(mixedStruct *structToPrint);
 static bool displayStruct(mixedStruct *structToDisplay);
 
 
-int
+void
 GucInfoMain(void)
 {
        struct config_generic **guc_vars;
@@ -64,7 +64,7 @@ GucInfoMain(void)
                        printMixedStruct(var);
        }
 
-       return 0;
+       exit(0);
 }
 
 
index e966a73977ca2c237a4ab5470c09eaeb760f6fea..b31bca941101247da9e6c8756f08ba28631be85a 100644 (file)
@@ -40,7 +40,7 @@ extern Form_pg_attribute attrtypes[MAXATTR];
 extern int     numattr;
 
 
-extern void AuxiliaryProcessMain(int argc, char *argv[]);
+extern void AuxiliaryProcessMain(int argc, char *argv[]) __attribute__((noreturn));
 
 extern void err_out(void);
 
index cad9b54e7b50aadbc43ad66dd36e2262383ee24b..613c1c2ad8ad4ccab248314dd5e91ece35412ee5 100644 (file)
@@ -749,7 +749,7 @@ extern void pgstat_reset_all(void);
 extern void allow_immediate_pgstat_restart(void);
 
 #ifdef EXEC_BACKEND
-extern void PgstatCollectorMain(int argc, char *argv[]);
+extern void PgstatCollectorMain(int argc, char *argv[]) __attribute__((noreturn));
 #endif
 
 
index 8009fde1e0789cb3cc1847b656feaa5a6d6f796c..a851758aeb62e593f8dfe13a0821edf599e70563 100644 (file)
@@ -52,8 +52,8 @@ extern void AutoVacWorkerFailed(void);
 extern void AutoVacuumUpdateDelay(void);
 
 #ifdef EXEC_BACKEND
-extern void AutoVacLauncherMain(int argc, char *argv[]);
-extern void AutoVacWorkerMain(int argc, char *argv[]);
+extern void AutoVacLauncherMain(int argc, char *argv[]) __attribute__((noreturn));
+extern void AutoVacWorkerMain(int argc, char *argv[]) __attribute__((noreturn));
 extern void AutovacuumWorkerIAm(void);
 extern void AutovacuumLauncherIAm(void);
 #endif
index f46d4ad7077dc06c559528308b175b57c7bffd75..996065c2edff17f6fb1c63ef8f2d3394f5c72ab2 100644 (file)
@@ -25,8 +25,8 @@ extern int    CheckPointTimeout;
 extern int     CheckPointWarning;
 extern double CheckPointCompletionTarget;
 
-extern void BackgroundWriterMain(void);
-extern void CheckpointerMain(void);
+extern void BackgroundWriterMain(void) __attribute__((noreturn));
+extern void CheckpointerMain(void) __attribute__((noreturn));
 
 extern void RequestCheckpoint(int flags);
 extern void CheckpointWriteDelay(int flags, double progress);
index 8e4472544f1f25fb0afb1fc2a2c72d0f80d24fae..be61031db172fc44ebb7e447588d71d1b24e528c 100644 (file)
@@ -20,7 +20,7 @@
 extern int     pgarch_start(void);
 
 #ifdef EXEC_BACKEND
-extern void PgArchiverMain(int argc, char *argv[]);
+extern void PgArchiverMain(int argc, char *argv[]) __attribute__((noreturn));
 #endif
 
 #endif   /* _PGARCH_H */
index 683ce3c4074775d173de8de20049b59109e55d4d..7d01d3d6248610a0aecee9bcdbd85d4cb54ca8fa 100644 (file)
@@ -46,14 +46,14 @@ extern int  postmaster_alive_fds[2];
 
 extern const char *progname;
 
-extern int     PostmasterMain(int argc, char *argv[]);
+extern void PostmasterMain(int argc, char *argv[]) __attribute__((noreturn));
 extern void ClosePostmasterPorts(bool am_syslogger);
 
 extern int     MaxLivePostmasterChildren(void);
 
 #ifdef EXEC_BACKEND
 extern pid_t postmaster_forkexec(int argc, char *argv[]);
-extern int     SubPostmasterMain(int argc, char *argv[]);
+extern void    SubPostmasterMain(int argc, char *argv[]) __attribute__((noreturn));
 
 extern Size ShmemBackendArraySize(void);
 extern void ShmemBackendArrayAllocation(void);
index 3ec69502eb1a7da02c9f7fcfc3ac63da73c706bb..54400b5d2aca41a61425ba70be735ba26049b0c5 100644 (file)
@@ -13,7 +13,7 @@
 #define _STARTUP_H
 
 extern void HandleStartupProcInterrupts(void);
-extern void StartupProcessMain(void);
+extern void StartupProcessMain(void) __attribute__((noreturn));
 extern void PreRestoreCommand(void);
 extern void PostRestoreCommand(void);
 extern bool IsPromoteTriggered(void);
index dc88207b3d9c3ab81f015b118046c13c2cdd77c1..cb0ccb6955b99e9e561aa6143c729096d7efaa72 100644 (file)
@@ -84,7 +84,7 @@ extern int    SysLogger_Start(void);
 extern void write_syslogger_file(const char *buffer, int count, int dest);
 
 #ifdef EXEC_BACKEND
-extern void SysLoggerMain(int argc, char *argv[]);
+extern void SysLoggerMain(int argc, char *argv[]) __attribute__((noreturn));
 #endif
 
 #endif   /* _SYSLOGGER_H */
index 41c539a359dd85429bff852a51cd1442d9b6cc9f..922142a9d113e233c7eb27ab5dd72a637b676a9d 100644 (file)
@@ -15,6 +15,6 @@
 /* GUC options */
 extern int     WalWriterDelay;
 
-extern void WalWriterMain(void);
+extern void WalWriterMain(void) __attribute__((noreturn));
 
 #endif   /* _WALWRITER_H */
index d21ec94a45511b3432515f3b7175da883a112503..31449d214ec1c0416ab5a4dbf6142b41903d8782 100644 (file)
@@ -109,7 +109,7 @@ typedef void (*walrcv_disconnect_type) (void);
 extern PGDLLIMPORT walrcv_disconnect_type walrcv_disconnect;
 
 /* prototypes for functions in walreceiver.c */
-extern void WalReceiverMain(void);
+extern void WalReceiverMain(void) __attribute__((noreturn));
 
 /* prototypes for functions in walreceiverfuncs.c */
 extern Size WalRcvShmemSize(void);
index 128d2dbf592d19d16f4f31a8654a5f3c8dbcec49..65536016c28bf31be0b065c8aa0678bb0172ca86 100644 (file)
@@ -26,7 +26,7 @@ extern volatile sig_atomic_t walsender_ready_to_stop;
 extern int     max_wal_senders;
 extern int     replication_timeout;
 
-extern int     WalSenderMain(void);
+extern void WalSenderMain(void) __attribute__((noreturn));
 extern void WalSndSignals(void);
 extern Size WalSndShmemSize(void);
 extern void WalSndShmemInit(void);
index 16025c3dde317eec54cec2ff0766cd210142eadc..3bc2e58345f3bdf624f34e98761552188949143c 100644 (file)
@@ -64,7 +64,7 @@ typedef void (*shmem_startup_hook_type) (void);
 /* ipc.c */
 extern bool proc_exit_inprogress;
 
-extern void proc_exit(int code);
+extern void proc_exit(int code) __attribute__((noreturn));
 extern void shmem_exit(int code);
 extern void on_proc_exit(pg_on_exit_callback function, Datum arg);
 extern void on_shmem_exit(pg_on_exit_callback function, Datum arg);
index 964dd19c2c363b5c116c90f9c8c6fbfd5200b7e7..2ac6554e6451b3c1e6bfc6bc99513504a3e6c96d 100644 (file)
@@ -61,7 +61,7 @@ extern bool check_max_stack_depth(int *newval, void **extra, GucSource source);
 extern void assign_max_stack_depth(int newval, void *extra);
 
 extern void die(SIGNAL_ARGS);
-extern void quickdie(SIGNAL_ARGS);
+extern void quickdie(SIGNAL_ARGS) __attribute__((noreturn));
 extern void StatementCancelHandler(SIGNAL_ARGS);
 extern void FloatExceptionHandler(SIGNAL_ARGS);
 extern void RecoveryConflictInterrupt(ProcSignalReason reason); /* called from SIGUSR1
@@ -70,7 +70,7 @@ extern void prepare_for_client_read(void);
 extern void client_read_ended(void);
 extern const char *process_postgres_switches(int argc, char *argv[],
                                                  GucContext ctx);
-extern int     PostgresMain(int argc, char *argv[], const char *username);
+extern void PostgresMain(int argc, char *argv[], const char *username) __attribute__((noreturn));
 extern long get_stack_depth_rlimit(void);
 extern void ResetUsage(void);
 extern void ShowUsage(const char *title);
index b569a4edad8e9997370f48bd78f38a81bc1a830c..61e04e95697a6a14bfdafb968e26b64dcfe3505f 100644 (file)
@@ -12,6 +12,6 @@
 #ifndef HELP_CONFIG_H
 #define HELP_CONFIG_H 1
 
-extern int     GucInfoMain(void);
+extern void GucInfoMain(void) __attribute__((noreturn));
 
 #endif