From bb44a7c52521bc3c5c6ee81a546ea82855690e81 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Thu, 27 May 2004 15:07:41 +0000 Subject: [PATCH] pgindent files for Tom. --- src/backend/main/main.c | 82 ++--- src/backend/postmaster/postmaster.c | 452 +++++++++++++++------------- 2 files changed, 284 insertions(+), 250 deletions(-) diff --git a/src/backend/main/main.c b/src/backend/main/main.c index c93dc4ef4d..bbf3fc47ec 100644 --- a/src/backend/main/main.c +++ b/src/backend/main/main.c @@ -13,7 +13,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/main/main.c,v 1.82 2004/05/25 01:00:20 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/main/main.c,v 1.83 2004/05/27 15:07:40 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -23,7 +23,7 @@ #include #include -#if defined(__alpha) && defined(__osf__) /* no __alpha__ ? */ +#if defined(__alpha) && defined(__osf__) /* no __alpha__ ? */ #include #include "machine/hal_sysinfo.h" #define ASSEMBLER @@ -50,6 +50,7 @@ int main(int argc, char *argv[]) { int len; + #ifndef WIN32 struct passwd *pw; #endif @@ -67,7 +68,7 @@ main(int argc, char *argv[]) * without help. Avoid adding more here, if you can. */ -#if defined(__alpha) /* no __alpha__ ? */ +#if defined(__alpha) /* no __alpha__ ? */ #ifdef NOFIXADE int buffer[] = {SSIN_UACPROC, UAC_SIGBUS}; #endif /* NOFIXADE */ @@ -77,7 +78,7 @@ main(int argc, char *argv[]) #endif /* __alpha */ #ifdef WIN32 - char *env_locale; + char *env_locale; #endif #if defined(NOFIXADE) || defined(NOPRINTADE) @@ -86,7 +87,7 @@ main(int argc, char *argv[]) syscall(SYS_sysmips, MIPS_FIXADE, 0, NULL, NULL, NULL); #endif -#if defined(__alpha) /* no __alpha__ ? */ +#if defined(__alpha) /* no __alpha__ ? */ if (setsysinfo(SSI_NVPAIRS, buffer, 1, (caddr_t) NULL, (unsigned long) NULL) < 0) fprintf(stderr, gettext("%s: setsysinfo failed: %s\n"), @@ -96,15 +97,15 @@ main(int argc, char *argv[]) #if defined(WIN32) { - WSADATA wsaData; - int err; + WSADATA wsaData; + int err; /* Make output streams unbuffered by default */ - setvbuf(stdout,NULL,_IONBF,0); - setvbuf(stderr,NULL,_IONBF,0); + setvbuf(stdout, NULL, _IONBF, 0); + setvbuf(stderr, NULL, _IONBF, 0); /* Prepare Winsock */ - err = WSAStartup(MAKEWORD(2,2), &wsaData); + err = WSAStartup(MAKEWORD(2, 2), &wsaData); if (err != 0) { fprintf(stderr, "%s: WSAStartup failed: %d\n", @@ -129,15 +130,15 @@ main(int argc, char *argv[]) /* * Remember the physical location of the initially given argv[] array - * for possible use by ps display. On some platforms, the argv[] - * storage must be overwritten in order to set the process title for ps. - * In such cases save_ps_display_args makes and returns a new copy of - * the argv[] array. + * for possible use by ps display. On some platforms, the argv[] + * storage must be overwritten in order to set the process title for + * ps. In such cases save_ps_display_args makes and returns a new copy + * of the argv[] array. * * save_ps_display_args may also move the environment strings to make - * extra room. Therefore this should be done as early as possible during - * startup, to avoid entanglements with code that might save a getenv() - * result pointer. + * extra room. Therefore this should be done as early as possible + * during startup, to avoid entanglements with code that might save a + * getenv() result pointer. */ argv = save_ps_display_args(argc, argv); @@ -145,31 +146,32 @@ main(int argc, char *argv[]) * Set up locale information from environment. Note that LC_CTYPE and * LC_COLLATE will be overridden later from pg_control if we are in an * already-initialized database. We set them here so that they will - * be available to fill pg_control during initdb. LC_MESSAGES will get - * set later during GUC option processing, but we set it here to allow - * startup error messages to be localized. + * be available to fill pg_control during initdb. LC_MESSAGES will + * get set later during GUC option processing, but we set it here to + * allow startup error messages to be localized. */ set_pglocale(argv[0], "postgres"); #ifdef WIN32 - /* - * Windows uses codepages rather than the environment, so we work around - * that by querying the environment explicitly first for LC_COLLATE - * and LC_CTYPE. We have to do this because initdb passes those values - * in the environment. If there is nothing there we fall back on the - * codepage. + + /* + * Windows uses codepages rather than the environment, so we work + * around that by querying the environment explicitly first for + * LC_COLLATE and LC_CTYPE. We have to do this because initdb passes + * those values in the environment. If there is nothing there we fall + * back on the codepage. */ if ((env_locale = getenv("LC_COLLATE")) != NULL) - setlocale(LC_COLLATE,env_locale); + setlocale(LC_COLLATE, env_locale); else - setlocale(LC_COLLATE, ""); + setlocale(LC_COLLATE, ""); if ((env_locale = getenv("LC_CTYPE")) != NULL) - setlocale(LC_CTYPE,env_locale); + setlocale(LC_CTYPE, env_locale); else - setlocale(LC_CTYPE, ""); + setlocale(LC_CTYPE, ""); #else setlocale(LC_COLLATE, ""); setlocale(LC_CTYPE, ""); @@ -213,7 +215,7 @@ main(int argc, char *argv[]) gettext("\"root\" execution of the PostgreSQL server is not permitted.\n" "The server must be started under an unprivileged user ID to prevent\n" "possible system security compromise. See the documentation for\n" - "more information on how to properly start the server.\n" + "more information on how to properly start the server.\n" )); exit(1); } @@ -241,14 +243,14 @@ main(int argc, char *argv[]) /* * Now dispatch to one of PostmasterMain, PostgresMain, GucInfoMain, * SubPostmasterMain, pgstat_main, pgstat_mainChild or BootstrapMain - * depending on the program name (and possibly first argument) we - * were called with. The lack of consistency here is historical. + * depending on the program name (and possibly first argument) we were + * called with. The lack of consistency here is historical. */ len = strlen(argv[0]); if ((len >= 10 && strcmp(argv[0] + len - 10, "postmaster") == 0) #ifdef WIN32 - || (len >= 14 && strcmp(argv[0] + len - 14, "postmaster.exe") == 0) + || (len >= 14 && strcmp(argv[0] + len - 14, "postmaster.exe") == 0) #endif ) { @@ -264,9 +266,11 @@ main(int argc, char *argv[]) exit(BootstrapMain(argc - 1, argv + 1)); #ifdef EXEC_BACKEND + /* - * If the first argument is "-forkexec", then invoke SubPostmasterMain. Note - * we remove "-forkexec" from the arguments passed on to SubPostmasterMain. + * If the first argument is "-forkexec", then invoke + * SubPostmasterMain. Note we remove "-forkexec" from the arguments + * passed on to SubPostmasterMain. */ if (argc > 1 && strcmp(argv[1], "-forkexec") == 0) { @@ -275,16 +279,16 @@ main(int argc, char *argv[]) } /* - * If the first argument is "-statBuf", then invoke pgstat_main. + * If the first argument is "-statBuf", then invoke pgstat_main. */ if (argc > 1 && strcmp(argv[1], "-statBuf") == 0) { - pgstat_main(argc , argv); + pgstat_main(argc, argv); exit(0); } /* - * If the first argument is "-statCol", then invoke pgstat_mainChild. + * If the first argument is "-statCol", then invoke pgstat_mainChild. */ if (argc > 1 && strcmp(argv[1], "-statCol") == 0) { diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 3ccbd49fba..3926408d7c 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -37,7 +37,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.395 2004/05/26 18:35:35 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.396 2004/05/27 15:07:41 momjian Exp $ * * NOTES * @@ -180,6 +180,7 @@ static int ListenSocket[MAXLISTEN]; /* Used to reduce macros tests */ #ifdef EXEC_BACKEND const bool ExecBackend = true; + #else const bool ExecBackend = false; #endif @@ -270,7 +271,7 @@ static void CleanupProc(int pid, int exitstatus); static void LogChildExit(int lev, const char *procname, int pid, int exitstatus); static void BackendInit(Port *port); -static int BackendRun(Port *port); +static int BackendRun(Port *port); static void ExitPostmaster(int status); static void usage(const char *); static int ServerLoop(void); @@ -295,14 +296,14 @@ __attribute__((format(printf, 1, 2))); #ifdef EXEC_BACKEND #ifdef WIN32 -pid_t win32_forkexec(const char* path, char *argv[]); +pid_t win32_forkexec(const char *path, char *argv[]); -static void win32_AddChild(pid_t pid, HANDLE handle); -static void win32_RemoveChild(pid_t pid); +static void win32_AddChild(pid_t pid, HANDLE handle); +static void win32_RemoveChild(pid_t pid); static pid_t win32_waitpid(int *exitstatus); static DWORD WINAPI win32_sigchld_waiter(LPVOID param); -static pid_t *win32_childPIDArray; +static pid_t *win32_childPIDArray; static HANDLE *win32_childHNDArray; static unsigned long win32_numChildren = 0; #endif @@ -310,16 +311,16 @@ static unsigned long win32_numChildren = 0; static pid_t Backend_forkexec(Port *port); static unsigned long tmpBackendFileNum = 0; -void read_backend_variables(unsigned long id, Port *port); +void read_backend_variables(unsigned long id, Port *port); static bool write_backend_variables(Port *port); -static void ShmemBackendArrayAdd(Backend *bn); +static void ShmemBackendArrayAdd(Backend *bn); static void ShmemBackendArrayRemove(pid_t pid); #endif #define StartupDataBase() SSDataBase(BS_XLOG_STARTUP) #define CheckPointDataBase() SSDataBase(BS_XLOG_CHECKPOINT) -#define StartBackgroundWriter() SSDataBase(BS_XLOG_BGWRITER) +#define StartBackgroundWriter() SSDataBase(BS_XLOG_BGWRITER) #define ShutdownDataBase() SSDataBase(BS_XLOG_SHUTDOWN) static void @@ -462,9 +463,9 @@ PostmasterMain(int argc, char *argv[]) if (find_my_exec(argv[0], my_exec_path) < 0) elog(FATAL, - gettext("%s: could not locate my own executable path"), - argv[0]); - + gettext("%s: could not locate my own executable path"), + argv[0]); + get_pkglib_path(my_exec_path, pkglib_path); /* @@ -610,7 +611,7 @@ PostmasterMain(int argc, char *argv[]) default: fprintf(stderr, - gettext("Try \"%s --help\" for more information.\n"), + gettext("Try \"%s --help\" for more information.\n"), progname); ExitPostmaster(1); } @@ -635,7 +636,7 @@ PostmasterMain(int argc, char *argv[]) SetDataDir(potential_DataDir); ProcessConfigFile(PGC_POSTMASTER); - + /* If timezone is not set, determine what the OS uses */ pg_timezone_initialize(); @@ -687,15 +688,15 @@ PostmasterMain(int argc, char *argv[]) char **p; ereport(DEBUG3, - (errmsg_internal("%s: PostmasterMain: initial environ dump:", - progname))); + (errmsg_internal("%s: PostmasterMain: initial environ dump:", + progname))); ereport(DEBUG3, - (errmsg_internal("-----------------------------------------"))); + (errmsg_internal("-----------------------------------------"))); for (p = environ; *p; ++p) ereport(DEBUG3, (errmsg_internal("\t%s", *p))); ereport(DEBUG3, - (errmsg_internal("-----------------------------------------"))); + (errmsg_internal("-----------------------------------------"))); } #ifdef EXEC_BACKEND @@ -704,7 +705,7 @@ PostmasterMain(int argc, char *argv[]) (errmsg("%s: could not locate postgres executable or non-matching version", progname))); #endif - + /* * Initialize SSL library, if specified. */ @@ -772,7 +773,7 @@ PostmasterMain(int argc, char *argv[]) endptr++; c = *endptr; *endptr = '\0'; - if (strcmp(curhost,"*") == 0) + if (strcmp(curhost, "*") == 0) status = StreamServerPort(AF_UNSPEC, NULL, (unsigned short) PostPortNumber, UnixSocketDir, @@ -784,11 +785,11 @@ PostmasterMain(int argc, char *argv[]) ListenSocket, MAXLISTEN); if (status != STATUS_OK) ereport(WARNING, - (errmsg("could not create listen socket for \"%s\"", - curhost))); + (errmsg("could not create listen socket for \"%s\"", + curhost))); *endptr = c; if (c != '\0') - curhost = endptr+1; + curhost = endptr + 1; else break; } @@ -803,7 +804,7 @@ PostmasterMain(int argc, char *argv[]) "", htonl(PostPortNumber), "", - (DNSServiceRegistrationReply) reg_reply, + (DNSServiceRegistrationReply) reg_reply, NULL); } #endif @@ -833,8 +834,9 @@ PostmasterMain(int argc, char *argv[]) reset_shared(PostPortNumber); /* - * Estimate number of openable files. This must happen after setting up - * semaphores, because on some platforms semaphores count as open files. + * Estimate number of openable files. This must happen after setting + * up semaphores, because on some platforms semaphores count as open + * files. */ set_max_safe_fds(); @@ -844,11 +846,12 @@ PostmasterMain(int argc, char *argv[]) BackendList = DLNewList(); #ifdef WIN32 + /* * Initialize the child pid/HANDLE arrays */ - win32_childPIDArray = (pid_t*)malloc(NUM_BACKENDARRAY_ELEMS*sizeof(pid_t)); - win32_childHNDArray = (HANDLE*)malloc(NUM_BACKENDARRAY_ELEMS*sizeof(HANDLE)); + win32_childPIDArray = (pid_t *) malloc(NUM_BACKENDARRAY_ELEMS * sizeof(pid_t)); + win32_childHNDArray = (HANDLE *) malloc(NUM_BACKENDARRAY_ELEMS * sizeof(HANDLE)); if (!win32_childPIDArray || !win32_childHNDArray) ereport(FATAL, (errcode(ERRCODE_OUT_OF_MEMORY), @@ -947,7 +950,7 @@ pmdaemonize(int argc, char *argv[]) { #ifdef WIN32 /* not supported */ - elog(FATAL,"SilentMode not supported under WIN32"); + elog(FATAL, "SilentMode not supported under WIN32"); #else int i; pid_t pid; @@ -1105,16 +1108,14 @@ ServerLoop(void) } /* - * If no background writer process is running and we should - * do background writing, start one. It doesn't matter if - * this fails, we'll just try again later. + * If no background writer process is running and we should do + * background writing, start one. It doesn't matter if this fails, + * we'll just try again later. */ if (BgWriterPID == 0 && BgWriterPercent > 0 && StartupPID == 0 && Shutdown == NoShutdown && !FatalError && random_seed != 0) - { BgWriterPID = StartBackgroundWriter(); - } /* * Wait for something to happen. @@ -1349,7 +1350,7 @@ ProcessStartupPacket(Port *port, bool SSLdone) * Now fetch parameters out of startup packet and save them into the * Port structure. All data structures attached to the Port struct * must be allocated in TopMemoryContext so that they won't disappear - * when we pass them to PostgresMain (see BackendRun). We need not + * when we pass them to PostgresMain (see BackendRun). We need not * worry about leaking this storage on failure, since we aren't in the * postmaster process anymore. */ @@ -1523,10 +1524,12 @@ processCancelRequest(Port *port, void *pkt) int backendPID; long cancelAuthCode; Backend *bp; + #ifndef EXEC_BACKEND Dlelem *curr; + #else - int i; + int i; #endif backendPID = (int) ntohl(canc->backendPID); @@ -1555,7 +1558,7 @@ processCancelRequest(Port *port, void *pkt) #else for (i = 0; i < NUM_BACKENDARRAY_ELEMS; i++) { - bp = (Backend*) &ShmemBackendArray[i]; + bp = (Backend *) &ShmemBackendArray[i]; #endif if (bp->pid == backendPID) { @@ -1733,8 +1736,8 @@ SIGHUP_handler(SIGNAL_ARGS) load_ident(); /* - * Tell the background writer to terminate so that we - * will start a new one with a possibly changed config + * Tell the background writer to terminate so that we will start a + * new one with a possibly changed config */ if (BgWriterPID != 0) kill(BgWriterPID, SIGTERM); @@ -1829,8 +1832,8 @@ pmdie(SIGNAL_ARGS) * No children left. Shutdown data base system. * * Unlike the previous case, it is not an error for the shutdown - * process to be running already (we could get SIGTERM followed - * shortly later by SIGINT). + * process to be running already (we could get SIGTERM + * followed shortly later by SIGINT). */ if (StartupPID > 0 || FatalError) /* let reaper() handle * this */ @@ -1874,6 +1877,7 @@ reaper(SIGNAL_ARGS) #ifdef HAVE_WAITPID int status; /* backend exit status */ + #else #ifndef WIN32 union wait status; /* backend exit status */ @@ -1899,10 +1903,10 @@ reaper(SIGNAL_ARGS) while ((pid = win32_waitpid(&exitstatus)) > 0) { /* - * We need to do this here, and not in CleanupProc, since this - * is to be called on all children when we are done with them. - * Could move to LogChildExit, but that seems like asking for - * future trouble... + * We need to do this here, and not in CleanupProc, since this is + * to be called on all children when we are done with them. Could + * move to LogChildExit, but that seems like asking for future + * trouble... */ win32_RemoveChild(pid); #endif @@ -2087,7 +2091,7 @@ CleanupProc(int pid, if (!FatalError) { LogChildExit(LOG, - (pid == CheckPointPID) ? gettext("checkpoint process") : + (pid == CheckPointPID) ? gettext("checkpoint process") : (pid == BgWriterPID) ? gettext("bgwriter process") : gettext("server process"), pid, exitstatus); @@ -2115,7 +2119,7 @@ CleanupProc(int pid, { ereport(DEBUG2, (errmsg_internal("sending %s to process %d", - (SendStop ? "SIGSTOP" : "SIGQUIT"), + (SendStop ? "SIGSTOP" : "SIGQUIT"), (int) bp->pid))); kill(bp->pid, (SendStop ? SIGSTOP : SIGQUIT)); } @@ -2141,9 +2145,7 @@ CleanupProc(int pid, checkpointed = 0; } else if (pid == BgWriterPID) - { BgWriterPID = 0; - } else { /* @@ -2398,8 +2400,8 @@ split_opts(char **argv, int *argcp, char *s) /* * BackendInit/Run -- perform authentication [BackendInit], and if successful, - * set up the backend's argument list [BackendRun] and invoke - * backend main() + * set up the backend's argument list [BackendRun] and invoke + * backend main() * * returns: * Shouldn't return at all. @@ -2427,7 +2429,7 @@ BackendInit(Port *port) */ /* save start time for end of session reporting */ - gettimeofday(&(port->session_start),NULL); + gettimeofday(&(port->session_start), NULL); /* set these to empty in case they are needed before we set them up */ port->remote_host = ""; @@ -2469,14 +2471,15 @@ BackendInit(Port *port) remote_port, sizeof(remote_port), (log_hostname ? 0 : NI_NUMERICHOST) | NI_NUMERICSERV)) { - int ret = getnameinfo_all(&port->raddr.addr, port->raddr.salen, - remote_host, sizeof(remote_host), - remote_port, sizeof(remote_port), - NI_NUMERICHOST | NI_NUMERICSERV); + int ret = getnameinfo_all(&port->raddr.addr, port->raddr.salen, + remote_host, sizeof(remote_host), + remote_port, sizeof(remote_port), + NI_NUMERICHOST | NI_NUMERICSERV); + if (ret) ereport(WARNING, - (errmsg("getnameinfo_all() failed: %s", - gai_strerror(ret)))); + (errmsg("getnameinfo_all() failed: %s", + gai_strerror(ret)))); } snprintf(remote_ps_data, sizeof(remote_ps_data), remote_port[0] == '\0' ? "%s" : "%s(%s)", @@ -2558,8 +2561,8 @@ BackendRun(Port *port) int i; /* - * Let's clean up ourselves as the postmaster child, and - * close the postmaster's other sockets + * Let's clean up ourselves as the postmaster child, and close the + * postmaster's other sockets */ ClosePostmasterPorts(true); @@ -2571,7 +2574,7 @@ BackendRun(Port *port) * PGOPTIONS, but it is not honored until after authentication.) */ if (PreAuthDelay > 0) - pg_usleep(PreAuthDelay*1000000L); + pg_usleep(PreAuthDelay * 1000000L); /* Will exit on failure */ BackendInit(port); @@ -2686,12 +2689,12 @@ BackendRun(Port *port) * Shouldn't return at all. */ void -SubPostmasterMain(int argc, char* argv[]) +SubPostmasterMain(int argc, char *argv[]) { - unsigned long backendID; - Port port; + unsigned long backendID; + Port port; - memset((void*)&port, 0, sizeof(Port)); + memset((void *) &port, 0, sizeof(Port)); Assert(argc == 2); /* Do this sooner rather than later... */ @@ -2707,11 +2710,11 @@ SubPostmasterMain(int argc, char* argv[]) /* Parse passed-in context */ argc = 0; - backendID = (unsigned long)atol(argv[argc++]); - DataDir = strdup(argv[argc++]); + backendID = (unsigned long) atol(argv[argc++]); + DataDir = strdup(argv[argc++]); /* Read in file-based context */ - read_backend_variables(backendID,&port); + read_backend_variables(backendID, &port); read_nondefault_variables(); /* Remaining initialization */ @@ -2740,20 +2743,22 @@ SubPostmasterMain(int argc, char* argv[]) static pid_t Backend_forkexec(Port *port) { - pid_t pid; - char *av[5]; - int ac = 0, bufc = 0, i; - char buf[2][MAXPGPATH]; + pid_t pid; + char *av[5]; + int ac = 0, + bufc = 0, + i; + char buf[2][MAXPGPATH]; if (!write_backend_variables(port)) - return -1; /* log made by write_backend_variables */ + return -1; /* log made by write_backend_variables */ av[ac++] = "postgres"; av[ac++] = "-forkexec"; /* Format up context to pass to exec'd process */ - snprintf(buf[bufc++],MAXPGPATH,"%lu",tmpBackendFileNum); - snprintf(buf[bufc++],MAXPGPATH,"\"%s\"",DataDir); + snprintf(buf[bufc++], MAXPGPATH, "%lu", tmpBackendFileNum); + snprintf(buf[bufc++], MAXPGPATH, "\"%s\"", DataDir); /* Add to the arg list */ Assert(bufc <= lengthof(buf)); @@ -2762,23 +2767,23 @@ Backend_forkexec(Port *port) /* FIXME: [fork/exec] ExtraOptions? */ - av[ac++] = NULL; - Assert(ac <= lengthof(av)); + av[ac++] = NULL; + Assert(ac <= lengthof(av)); #ifdef WIN32 - pid = win32_forkexec(postgres_exec_path, av); /* logs on error */ + pid = win32_forkexec(postgres_exec_path, av); /* logs on error */ #else /* Fire off execv in child */ if ((pid = fork()) == 0 && (execv(postgres_exec_path, av) == -1)) + /* - * FIXME: [fork/exec] suggestions for what to do here? - * Probably OK to issue error (unlike pgstat case) + * FIXME: [fork/exec] suggestions for what to do here? Probably OK + * to issue error (unlike pgstat case) */ abort(); #endif - return pid; /* Parent returns pid */ + return pid; /* Parent returns pid */ } - #endif @@ -2833,7 +2838,7 @@ sigusr1_handler(SIGNAL_ARGS) ereport(LOG, (errmsg("checkpoints are occurring too frequently (%d seconds apart)", elapsed_secs), - errhint("Consider increasing the configuration parameter \"checkpoint_segments\"."))); + errhint("Consider increasing the configuration parameter \"checkpoint_segments\"."))); } LastSignalledCheckpoint = now; } @@ -2865,8 +2870,9 @@ sigusr1_handler(SIGNAL_ARGS) if (CheckPostmasterSignal(PMSIGNAL_WAKEN_CHILDREN)) { /* - * Send SIGUSR1 to all children (triggers CatchupInterruptHandler). - * See storage/ipc/sinval[adt].c for the use of this. + * Send SIGUSR1 to all children (triggers + * CatchupInterruptHandler). See storage/ipc/sinval[adt].c for the + * use of this. */ if (Shutdown == NoShutdown) SignalChildren(SIGUSR1); @@ -2999,8 +3005,7 @@ SSDataBaseInit(int xlop) { const char *statmsg; - IsUnderPostmaster = true; /* we are a postmaster subprocess - * now */ + IsUnderPostmaster = true; /* we are a postmaster subprocess now */ #ifdef EXEC_BACKEND /* In EXEC case we will not have inherited these settings */ @@ -3044,6 +3049,7 @@ SSDataBase(int xlop) { pid_t pid; Backend *bn; + #ifndef EXEC_BACKEND #ifdef LINUX_PROFILE struct itimerval prof_itimer; @@ -3092,7 +3098,7 @@ SSDataBase(int xlop) SSDataBaseInit(xlop); #else if (!write_backend_variables(NULL)) - return -1; /* log issued by write_backend_variables */ + return -1; /* log issued by write_backend_variables */ #endif /* Set up command-line arguments for subprocess */ @@ -3128,7 +3134,7 @@ SSDataBase(int xlop) #ifdef EXEC_BACKEND /* EXEC_BACKEND case; fork/exec here */ #ifdef WIN32 - pid = win32_forkexec(postgres_exec_path, av); /* logs on error */ + pid = win32_forkexec(postgres_exec_path, av); /* logs on error */ #else if ((pid = fork()) == 0 && (execv(postgres_exec_path, av) == -1)) { @@ -3164,7 +3170,7 @@ SSDataBase(int xlop) break; case BS_XLOG_BGWRITER: ereport(LOG, - (errmsg("could not fork bgwriter process: %m"))); + (errmsg("could not fork bgwriter process: %m"))); break; case BS_XLOG_SHUTDOWN: ereport(LOG, @@ -3190,8 +3196,8 @@ SSDataBase(int xlop) /* * The startup and shutdown processes are not considered normal - * backends, but the checkpoint and bgwriter processes are. - * They must be added to the list of backends. + * backends, but the checkpoint and bgwriter processes are. They must + * be added to the list of backends. */ if (xlop == BS_XLOG_CHECKPOINT || xlop == BS_XLOG_BGWRITER) { @@ -3288,7 +3294,7 @@ extern slock_t *ShmemIndexLock; extern void *ShmemIndexAlloc; typedef struct LWLock LWLock; extern LWLock *LWLockArray; -extern slock_t *ProcStructLock; +extern slock_t *ProcStructLock; extern int pgStatSock; #define write_var(var,fp) fwrite((void*)&(var),sizeof(var),1,fp) @@ -3297,7 +3303,7 @@ extern int pgStatSock; do { \ Assert(DataDir); \ sprintf((buf), \ - "%s/%s/%s.backend_var.%lu", \ + "%s/%s/%s.backend_var.%lu", \ DataDir, \ PG_TEMP_FILES_DIR, \ PG_TEMP_FILE_PREFIX, \ @@ -3307,24 +3313,26 @@ extern int pgStatSock; static bool write_backend_variables(Port *port) { - char filename[MAXPGPATH]; - FILE *fp; - get_tmp_backend_file_name(filename,++tmpBackendFileNum); + char filename[MAXPGPATH]; + FILE *fp; + + get_tmp_backend_file_name(filename, ++tmpBackendFileNum); /* Open file */ fp = AllocateFile(filename, PG_BINARY_W); if (!fp) { /* As per OpenTemporaryFile... */ - char dirname[MAXPGPATH]; - sprintf(dirname,"%s/%s",DataDir,PG_TEMP_FILES_DIR); + char dirname[MAXPGPATH]; + + sprintf(dirname, "%s/%s", DataDir, PG_TEMP_FILES_DIR); mkdir(dirname, S_IRWXU); fp = AllocateFile(filename, PG_BINARY_W); if (!fp) { ereport(ERROR, - (errcode_for_file_access(), + (errcode_for_file_access(), errmsg("could not write to file \"%s\": %m", filename))); return false; } @@ -3333,37 +3341,37 @@ write_backend_variables(Port *port) /* Write vars */ if (port) { - write_var(port->sock,fp); - write_var(port->proto,fp); - write_var(port->laddr,fp); - write_var(port->raddr,fp); - write_var(port->canAcceptConnections,fp); - write_var(port->cryptSalt,fp); - write_var(port->md5Salt,fp); + write_var(port->sock, fp); + write_var(port->proto, fp); + write_var(port->laddr, fp); + write_var(port->raddr, fp); + write_var(port->canAcceptConnections, fp); + write_var(port->cryptSalt, fp); + write_var(port->md5Salt, fp); } - write_var(MyCancelKey,fp); + write_var(MyCancelKey, fp); - write_var(RedoRecPtr,fp); - write_var(LogwrtResult,fp); + write_var(RedoRecPtr, fp); + write_var(LogwrtResult, fp); - write_var(UsedShmemSegID,fp); - write_var(UsedShmemSegAddr,fp); + write_var(UsedShmemSegID, fp); + write_var(UsedShmemSegAddr, fp); - write_var(ShmemLock,fp); - write_var(ShmemIndexLock,fp); - write_var(ShmemVariableCache,fp); - write_var(ShmemIndexAlloc,fp); - write_var(ShmemBackendArray,fp); + write_var(ShmemLock, fp); + write_var(ShmemIndexLock, fp); + write_var(ShmemVariableCache, fp); + write_var(ShmemIndexAlloc, fp); + write_var(ShmemBackendArray, fp); - write_var(LWLockArray,fp); - write_var(ProcStructLock,fp); - write_var(pgStatSock,fp); + write_var(LWLockArray, fp); + write_var(ProcStructLock, fp); + write_var(pgStatSock, fp); - write_var(PreAuthDelay,fp); - write_var(debug_flag,fp); - write_var(PostmasterPid,fp); + write_var(PreAuthDelay, fp); + write_var(debug_flag, fp); + write_var(PostmasterPid, fp); - fwrite((void *)my_exec_path, MAXPGPATH, 1, fp); + fwrite((void *) my_exec_path, MAXPGPATH, 1, fp); /* Release file */ if (FreeFile(fp)) @@ -3380,54 +3388,55 @@ write_backend_variables(Port *port) void read_backend_variables(unsigned long id, Port *port) { - char filename[MAXPGPATH]; - FILE *fp; - get_tmp_backend_file_name(filename,id); + char filename[MAXPGPATH]; + FILE *fp; + + get_tmp_backend_file_name(filename, id); /* Open file */ fp = AllocateFile(filename, PG_BINARY_R); if (!fp) { ereport(ERROR, - (errcode_for_file_access(), - errmsg("could not read from backend_variables file \"%s\": %m", filename))); + (errcode_for_file_access(), + errmsg("could not read from backend_variables file \"%s\": %m", filename))); return; } /* Read vars */ if (port) { - read_var(port->sock,fp); - read_var(port->proto,fp); - read_var(port->laddr,fp); - read_var(port->raddr,fp); - read_var(port->canAcceptConnections,fp); - read_var(port->cryptSalt,fp); - read_var(port->md5Salt,fp); + read_var(port->sock, fp); + read_var(port->proto, fp); + read_var(port->laddr, fp); + read_var(port->raddr, fp); + read_var(port->canAcceptConnections, fp); + read_var(port->cryptSalt, fp); + read_var(port->md5Salt, fp); } - read_var(MyCancelKey,fp); + read_var(MyCancelKey, fp); - read_var(RedoRecPtr,fp); - read_var(LogwrtResult,fp); + read_var(RedoRecPtr, fp); + read_var(LogwrtResult, fp); - read_var(UsedShmemSegID,fp); - read_var(UsedShmemSegAddr,fp); + read_var(UsedShmemSegID, fp); + read_var(UsedShmemSegAddr, fp); - read_var(ShmemLock,fp); - read_var(ShmemIndexLock,fp); - read_var(ShmemVariableCache,fp); - read_var(ShmemIndexAlloc,fp); - read_var(ShmemBackendArray,fp); + read_var(ShmemLock, fp); + read_var(ShmemIndexLock, fp); + read_var(ShmemVariableCache, fp); + read_var(ShmemIndexAlloc, fp); + read_var(ShmemBackendArray, fp); - read_var(LWLockArray,fp); - read_var(ProcStructLock,fp); - read_var(pgStatSock,fp); + read_var(LWLockArray, fp); + read_var(ProcStructLock, fp); + read_var(pgStatSock, fp); - read_var(PreAuthDelay,fp); - read_var(debug_flag,fp); - read_var(PostmasterPid,fp); + read_var(PreAuthDelay, fp); + read_var(debug_flag, fp); + read_var(PostmasterPid, fp); - fread((void *)my_exec_path, MAXPGPATH, 1, fp); + fread((void *) my_exec_path, MAXPGPATH, 1, fp); /* Release file */ FreeFile(fp); @@ -3438,21 +3447,26 @@ read_backend_variables(unsigned long id, Port *port) } -size_t ShmemBackendArraySize(void) +size_t +ShmemBackendArraySize(void) { - return (NUM_BACKENDARRAY_ELEMS*sizeof(Backend)); + return (NUM_BACKENDARRAY_ELEMS * sizeof(Backend)); } -void ShmemBackendArrayAllocation(void) +void +ShmemBackendArrayAllocation(void) { - size_t size = ShmemBackendArraySize(); - ShmemBackendArray = (Backend*)ShmemAlloc(size); + size_t size = ShmemBackendArraySize(); + + ShmemBackendArray = (Backend *) ShmemAlloc(size); memset(ShmemBackendArray, 0, size); } -static void ShmemBackendArrayAdd(Backend *bn) +static void +ShmemBackendArrayAdd(Backend *bn) { - int i; + int i; + for (i = 0; i < NUM_BACKENDARRAY_ELEMS; i++) { /* Find an empty slot */ @@ -3467,9 +3481,11 @@ static void ShmemBackendArrayAdd(Backend *bn) (errmsg_internal("unable to add backend entry"))); } -static void ShmemBackendArrayRemove(pid_t pid) +static void +ShmemBackendArrayRemove(pid_t pid) { - int i; + int i; + for (i = 0; i < NUM_BACKENDARRAY_ELEMS; i++) { if (ShmemBackendArray[i].pid == pid) @@ -3484,51 +3500,52 @@ static void ShmemBackendArrayRemove(pid_t pid) (errmsg_internal("unable to find backend entry with pid %d", pid))); } - #endif #ifdef WIN32 -pid_t win32_forkexec(const char* path, char *argv[]) +pid_t +win32_forkexec(const char *path, char *argv[]) { STARTUPINFO si; PROCESS_INFORMATION pi; - char *p; - int i; - char cmdLine[MAXPGPATH]; - HANDLE childHandleCopy; - HANDLE waiterThread; + char *p; + int i; + char cmdLine[MAXPGPATH]; + HANDLE childHandleCopy; + HANDLE waiterThread; /* Format the cmd line */ - snprintf(cmdLine,sizeof(cmdLine),"\"%s\"",path); + snprintf(cmdLine, sizeof(cmdLine), "\"%s\"", path); i = 0; while (argv[++i] != NULL) { /* FIXME: [fork/exec] some strlen checks might be prudent here */ - strcat(cmdLine," "); - strcat(cmdLine,argv[i]); + strcat(cmdLine, " "); + strcat(cmdLine, argv[i]); } /* - * The following snippet can disappear when we consistently - * use forward slashes. + * The following snippet can disappear when we consistently use + * forward slashes. */ p = cmdLine; while (*(p++) != '\0') - if (*p == '/') *p = '\\'; + if (*p == '/') + *p = '\\'; - memset(&pi,0,sizeof(pi)); - memset(&si,0,sizeof(si)); + memset(&pi, 0, sizeof(pi)); + memset(&si, 0, sizeof(si)); si.cb = sizeof(si); - if (!CreateProcess(NULL,cmdLine,NULL,NULL,TRUE,0,NULL,NULL,&si,&pi)) + if (!CreateProcess(NULL, cmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) { - elog(ERROR,"CreateProcess call failed (%i): %m",(int)GetLastError()); + elog(ERROR, "CreateProcess call failed (%i): %m", (int) GetLastError()); return -1; } if (!IsUnderPostmaster) /* We are the Postmaster creating a child... */ - win32_AddChild(pi.dwProcessId,pi.hProcess); + win32_AddChild(pi.dwProcessId, pi.hProcess); if (!DuplicateHandle(GetCurrentProcess(), pi.hProcess, @@ -3538,11 +3555,11 @@ pid_t win32_forkexec(const char* path, char *argv[]) FALSE, DUPLICATE_SAME_ACCESS)) ereport(FATAL, - (errmsg_internal("failed to duplicate child handle: %i",(int)GetLastError()))); - waiterThread = CreateThread(NULL, 64*1024, win32_sigchld_waiter, (LPVOID)childHandleCopy, 0, NULL); + (errmsg_internal("failed to duplicate child handle: %i", (int) GetLastError()))); + waiterThread = CreateThread(NULL, 64 * 1024, win32_sigchld_waiter, (LPVOID) childHandleCopy, 0, NULL); if (!waiterThread) ereport(FATAL, - (errmsg_internal("failed to create sigchld waiter thread: %i",(int)GetLastError()))); + (errmsg_internal("failed to create sigchld waiter thread: %i", (int) GetLastError()))); CloseHandle(waiterThread); if (IsUnderPostmaster) @@ -3554,15 +3571,16 @@ pid_t win32_forkexec(const char* path, char *argv[]) /* * Note: The following three functions must not be interrupted (eg. by signals). - * As the Postgres Win32 signalling architecture (currently) requires polling, - * or APC checking functions which aren't used here, this is not an issue. + * As the Postgres Win32 signalling architecture (currently) requires polling, + * or APC checking functions which aren't used here, this is not an issue. * - * We keep two separate arrays, instead of a single array of pid/HANDLE structs, - * to avoid having to re-create a handle array for WaitForMultipleObjects on - * each call to win32_waitpid. + * We keep two separate arrays, instead of a single array of pid/HANDLE structs, + * to avoid having to re-create a handle array for WaitForMultipleObjects on + * each call to win32_waitpid. */ -static void win32_AddChild(pid_t pid, HANDLE handle) +static void +win32_AddChild(pid_t pid, HANDLE handle) { Assert(win32_childPIDArray && win32_childHNDArray); if (win32_numChildren < NUM_BACKENDARRAY_ELEMS) @@ -3577,9 +3595,11 @@ static void win32_AddChild(pid_t pid, HANDLE handle) pid))); } -static void win32_RemoveChild(pid_t pid) +static void +win32_RemoveChild(pid_t pid) { - int i; + int i; + Assert(win32_childPIDArray && win32_childHNDArray); for (i = 0; i < win32_numChildren; i++) @@ -3601,27 +3621,28 @@ static void win32_RemoveChild(pid_t pid) pid))); } -static pid_t win32_waitpid(int *exitstatus) +static pid_t +win32_waitpid(int *exitstatus) { Assert(win32_childPIDArray && win32_childHNDArray); - elog(DEBUG3,"waiting on %lu children",win32_numChildren); + elog(DEBUG3, "waiting on %lu children", win32_numChildren); if (win32_numChildren > 0) { /* - * Note: Do NOT use WaitForMultipleObjectsEx, as we don't - * want to run queued APCs here. + * Note: Do NOT use WaitForMultipleObjectsEx, as we don't want to + * run queued APCs here. */ - int index; - DWORD exitCode; - DWORD ret = WaitForMultipleObjects(win32_numChildren,win32_childHNDArray,FALSE,0); + int index; + DWORD exitCode; + DWORD ret = WaitForMultipleObjects(win32_numChildren, win32_childHNDArray, FALSE, 0); switch (ret) { case WAIT_FAILED: ereport(ERROR, - (errmsg_internal("failed to wait on %lu children: %i", - win32_numChildren,(int)GetLastError()))); + (errmsg_internal("failed to wait on %lu children: %i", + win32_numChildren, (int) GetLastError()))); /* Fall through to WAIT_TIMEOUTs return */ case WAIT_TIMEOUT: @@ -3629,18 +3650,24 @@ static pid_t win32_waitpid(int *exitstatus) return -1; default: - /* Get the exit code, and return the PID of, the respective process */ - index = ret-WAIT_OBJECT_0; + + /* + * Get the exit code, and return the PID of, the + * respective process + */ + index = ret - WAIT_OBJECT_0; Assert(index >= 0 && index < win32_numChildren); - if (!GetExitCodeProcess(win32_childHNDArray[index],&exitCode)) + if (!GetExitCodeProcess(win32_childHNDArray[index], &exitCode)) + /* - * If we get this far, this should never happen, but, then again... - * No choice other than to assume a catastrophic failure. + * If we get this far, this should never happen, but, + * then again... No choice other than to assume a + * catastrophic failure. */ ereport(FATAL, (errmsg_internal("failed to get exit code for child %lu", - win32_childPIDArray[index]))); - *exitstatus = (int)exitCode; + win32_childPIDArray[index]))); + *exitstatus = (int) exitCode; return win32_childPIDArray[index]; } } @@ -3651,14 +3678,17 @@ static pid_t win32_waitpid(int *exitstatus) /* Note! Code belows executes on separate threads, one for each child process created */ -static DWORD WINAPI win32_sigchld_waiter(LPVOID param) { - HANDLE procHandle = (HANDLE)param; +static DWORD WINAPI +win32_sigchld_waiter(LPVOID param) +{ + HANDLE procHandle = (HANDLE) param; + + DWORD r = WaitForSingleObject(procHandle, INFINITE); - DWORD r = WaitForSingleObject(procHandle, INFINITE); if (r == WAIT_OBJECT_0) pg_queue_signal(SIGCHLD); else - fprintf(stderr,"ERROR: Failed to wait on child process handle: %i\n",(int)GetLastError()); + fprintf(stderr, "ERROR: Failed to wait on child process handle: %i\n", (int) GetLastError()); CloseHandle(procHandle); return 0; } -- 2.40.0