Postpone pg_timezone_initialize() until after creation of postmaster.pid,
authorTom Lane
Thu, 20 Oct 2005 20:05:45 +0000 (20:05 +0000)
committerTom Lane
Thu, 20 Oct 2005 20:05:45 +0000 (20:05 +0000)
since it can take a fair amount of time and this can confuse boot scripts
that expect postmaster.pid to appear quickly.  Move initialization of SSL
library and preloaded libraries to after that point, too, just for luck.
Per reports from Tony Caduto and others.

src/backend/bootstrap/bootstrap.c
src/backend/postmaster/postmaster.c
src/backend/tcop/postgres.c
src/backend/utils/misc/guc.c

index 9ea3d741112ec21b011729c425b063411e8f1e7d..898b6f72a29e52007c5918ce3c2651b63a8b2d35 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.207 2005/10/15 02:49:12 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.208 2005/10/20 20:05:44 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -359,6 +359,8 @@ BootstrapMain(int argc, char *argv[])
    {
        if (!SelectConfigFiles(userDoption, progname))
            proc_exit(1);
+       /* If timezone is not set, determine what the OS uses */
+       pg_timezone_initialize();
    }
 
    /* Validate we have been given a reasonable-looking DataDir */
index 527677e0e752d5ebe436fe0e4515b3435f43c52e..ad6477a372d34004a6bc5d8ee37c6f3c3187381d 100644 (file)
@@ -37,7 +37,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.470 2005/10/17 16:24:19 tgl Exp $
+ *   $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.471 2005/10/20 20:05:44 tgl Exp $
  *
  * NOTES
  *
@@ -626,7 +626,8 @@ PostmasterMain(int argc, char *argv[])
    }
 
    /*
-    * Other one-time internal sanity checks can go here.
+    * Other one-time internal sanity checks can go here, if they are fast.
+    * (Put any slow processing further down, after postmaster.pid creation.)
     */
    if (!CheckDateTokenTables())
    {
@@ -660,21 +661,6 @@ PostmasterMain(int argc, char *argv[])
             (errmsg_internal("-----------------------------------------")));
    }
 
-   /*
-    * Initialize SSL library, if specified.
-    */
-#ifdef USE_SSL
-   if (EnableSSL)
-       secure_initialize();
-#endif
-
-   /*
-    * process any libraries that should be preloaded and optionally
-    * pre-initialized
-    */
-   if (preload_libraries_string)
-       process_preload_libraries(preload_libraries_string);
-
    /*
     * Fork away from controlling terminal, if -S specified.
     *
@@ -695,6 +681,30 @@ PostmasterMain(int argc, char *argv[])
     */
    CreateDataDirLockFile(true);
 
+   /*
+    * If timezone is not set, determine what the OS uses.  (In theory this
+    * should be done during GUC initialization, but because it can take as
+    * much as several seconds, we delay it until after we've created the
+    * postmaster.pid file.  This prevents problems with boot scripts that
+    * expect the pidfile to appear quickly.)
+    */
+   pg_timezone_initialize();
+
+   /*
+    * Initialize SSL library, if specified.
+    */
+#ifdef USE_SSL
+   if (EnableSSL)
+       secure_initialize();
+#endif
+
+   /*
+    * process any libraries that should be preloaded and optionally
+    * pre-initialized
+    */
+   if (preload_libraries_string)
+       process_preload_libraries(preload_libraries_string);
+
    /*
     * Remove old temporary files.  At this point there can be no other
     * Postgres processes running in this directory, so this should be safe.
index 93bcc936602f42868aef85760105fc85f869c497..77a85f27e4f3fc882b0343a67a7095f50cab176b 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.466 2005/10/15 02:49:27 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.467 2005/10/20 20:05:45 tgl Exp $
  *
  * NOTES
  *   this is the "main" module of the postgres backend and
@@ -2760,6 +2760,8 @@ PostgresMain(int argc, char *argv[], const char *username)
    {
        if (!SelectConfigFiles(userDoption, argv[0]))
            proc_exit(1);
+       /* If timezone is not set, determine what the OS uses */
+       pg_timezone_initialize();
    }
 
    /*
index 5b2a6903fd123909661b1685a34d1c9c67c29fa0..30b5db8b9a63fe7662d694aa403a6ea38ec84756 100644 (file)
@@ -10,7 +10,7 @@
  * Written by Peter Eisentraut .
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.294 2005/10/16 18:26:00 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.295 2005/10/20 20:05:45 tgl Exp $
  *
  *--------------------------------------------------------------------
  */
@@ -2846,9 +2846,6 @@ SelectConfigFiles(const char *userDoption, const char *progname)
 
    free(configdir);
 
-   /* If timezone is not set, determine what the OS uses */
-   pg_timezone_initialize();
-
    return true;
 }