diff options
Diffstat (limited to 'src/backend/postmaster/postmaster.c')
-rw-r--r-- | src/backend/postmaster/postmaster.c | 47 |
1 files changed, 22 insertions, 25 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index d14f6db1630..2de55276483 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.457 2005/06/30 10:02:22 petere Exp $ + * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.458 2005/07/04 04:51:47 tgl Exp $ * * NOTES * @@ -585,6 +585,15 @@ PostmasterMain(int argc, char *argv[]) ExitPostmaster(1); } +#ifdef EXEC_BACKEND + /* Locate executable backend before we change working directory */ + if (find_other_exec(argv[0], "postgres", PG_VERSIONSTR, + postgres_exec_path) < 0) + ereport(FATAL, + (errmsg("%s: could not locate matching postgres executable", + progname))); +#endif + /* * Locate the proper configuration files and data directory, and * read postgresql.conf for the first time. @@ -595,6 +604,9 @@ PostmasterMain(int argc, char *argv[]) /* Verify that DataDir looks reasonable */ checkDataDir(); + /* And switch working directory into it */ + ChangeToDataDir(); + /* * Check for invalid combinations of GUC settings. */ @@ -650,14 +662,6 @@ PostmasterMain(int argc, char *argv[]) (errmsg_internal("-----------------------------------------"))); } -#ifdef EXEC_BACKEND - if (find_other_exec(argv[0], "postgres", PG_VERSIONSTR, - postgres_exec_path) < 0) - ereport(FATAL, - (errmsg("%s: could not locate matching postgres executable", - progname))); -#endif - /* * Initialize SSL library, if specified. */ @@ -691,7 +695,7 @@ PostmasterMain(int argc, char *argv[]) * :-(). For the same reason, it's best to grab the TCP socket(s) * before the Unix socket. */ - CreateDataDirLockFile(DataDir, true); + CreateDataDirLockFile(true); /* * Remove old temporary files. At this point there can be no other @@ -786,8 +790,6 @@ PostmasterMain(int argc, char *argv[]) ereport(FATAL, (errmsg("no socket created for listening"))); - XLOGPathInit(); - /* * Set up shared memory and semaphores. */ @@ -2866,20 +2868,16 @@ internal_forkexec(int argc, char *argv[], Port *port) return -1; /* log made by save_backend_variables */ /* Calculate name for temp file */ - Assert(DataDir); - snprintf(tmpfilename, MAXPGPATH, "%s/%s/%s.backend_var.%d.%lu", - DataDir, PG_TEMP_FILES_DIR, PG_TEMP_FILE_PREFIX, + snprintf(tmpfilename, MAXPGPATH, "%s/%s.backend_var.%d.%lu", + PG_TEMP_FILES_DIR, PG_TEMP_FILE_PREFIX, MyProcPid, ++tmpBackendFileNum); /* Open file */ fp = AllocateFile(tmpfilename, PG_BINARY_W); if (!fp) { - /* As per OpenTemporaryFile... */ - char dirname[MAXPGPATH]; - - snprintf(dirname, MAXPGPATH, "%s/%s", DataDir, PG_TEMP_FILES_DIR); - mkdir(dirname, S_IRWXU); + /* As in OpenTemporaryFile, try to make the temp-file directory */ + mkdir(PG_TEMP_FILES_DIR, S_IRWXU); fp = AllocateFile(tmpfilename, PG_BINARY_W); if (!fp) @@ -3527,15 +3525,14 @@ StartChildProcess(int xlop) static bool CreateOptsFile(int argc, char *argv[], char *fullprogname) { - char filename[MAXPGPATH]; FILE *fp; int i; - snprintf(filename, sizeof(filename), "%s/postmaster.opts", DataDir); +#define OPTS_FILE "postmaster.opts" - if ((fp = fopen(filename, "w")) == NULL) + if ((fp = fopen(OPTS_FILE, "w")) == NULL) { - elog(LOG, "could not create file \"%s\": %m", filename); + elog(LOG, "could not create file \"%s\": %m", OPTS_FILE); return false; } @@ -3546,7 +3543,7 @@ CreateOptsFile(int argc, char *argv[], char *fullprogname) if (fclose(fp)) { - elog(LOG, "could not write file \"%s\": %m", filename); + elog(LOG, "could not write file \"%s\": %m", OPTS_FILE); return false; } |