From 6e414a171e8a91966b10ecd14aa367422870bdd2 Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Sat, 10 Nov 2007 21:48:51 +0000
Subject: [PATCH] Add pg_ctl -t/timeout parameter to control amount of time to
 wait for start/shutdown.

---
 doc/src/sgml/ref/pg_ctl-ref.sgml | 29 ++++++++++++++++++++++++++---
 src/bin/pg_ctl/pg_ctl.c          | 15 ++++++++++-----
 2 files changed, 36 insertions(+), 8 deletions(-)

diff --git a/doc/src/sgml/ref/pg_ctl-ref.sgml b/doc/src/sgml/ref/pg_ctl-ref.sgml
index 437281c26c..f4200718c7 100644
--- a/doc/src/sgml/ref/pg_ctl-ref.sgml
+++ b/doc/src/sgml/ref/pg_ctl-ref.sgml
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/pg_ctl-ref.sgml,v 1.43 2007/11/10 14:07:18 momjian Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/pg_ctl-ref.sgml,v 1.44 2007/11/10 21:48:51 momjian Exp $
 PostgreSQL documentation
 -->
 
@@ -21,9 +21,11 @@ PostgreSQL documentation
 
  <refsynopsisdiv>
   <cmdsynopsis>
+
    <command>pg_ctl</command>
    <arg choice="plain">start</arg>
    <arg>-w</arg>
+   <arg>-t <replaceable>seconds</replaceable></arg>
    <arg>-s</arg>
    <arg>-D <replaceable>datadir</replaceable></arg>
    <arg>-l <replaceable>filename</replaceable></arg>
@@ -31,9 +33,11 @@ PostgreSQL documentation
    <arg>-p <replaceable>path</replaceable></arg>
    <arg>-c</arg>
    <sbr>
+
    <command>pg_ctl</command>
    <arg choice="plain">stop</arg>
    <arg>-W</arg>
+   <arg>-t <replaceable>seconds</replaceable></arg>
    <arg>-s</arg>
    <arg>-D <replaceable>datadir</replaceable></arg>
    <arg>-m
@@ -44,9 +48,11 @@ PostgreSQL documentation
      </group>
    </arg>
    <sbr>
+
    <command>pg_ctl</command>
    <arg choice="plain">restart</arg>
    <arg>-w</arg>
+   <arg>-t <replaceable>seconds</replaceable></arg>
    <arg>-s</arg>
    <arg>-D <replaceable>datadir</replaceable></arg>
    <arg>-c</arg>
@@ -59,20 +65,24 @@ PostgreSQL documentation
    </arg>
    <arg>-o <replaceable>options</replaceable></arg>
    <sbr>
+
    <command>pg_ctl</command>
    <arg choice="plain">reload</arg>
    <arg>-s</arg>
    <arg>-D <replaceable>datadir</replaceable></arg>
    <sbr>
+
    <command>pg_ctl</command>
    <arg choice="plain">status</arg>
    <arg>-D <replaceable>datadir</replaceable></arg>
    <sbr>
+
    <command>pg_ctl</command>
    <arg choice="plain">kill</arg>
    <arg><replaceable>signal_name</replaceable></arg>
    <arg><replaceable>process_id</replaceable></arg>
    <sbr>
+
    <command>pg_ctl</command>
    <arg choice="plain">register</arg>
    <arg>-N <replaceable>servicename</replaceable></arg>
@@ -80,11 +90,14 @@ PostgreSQL documentation
    <arg>-P <replaceable>password</replaceable></arg>
    <arg>-D <replaceable>datadir</replaceable></arg>
    <arg>-w</arg>
+   <arg>-t <replaceable>seconds</replaceable></arg>
    <arg>-o <replaceable>options</replaceable></arg>
    <sbr>
+
    <command>pg_ctl</command>
    <arg choice="plain">unregister</arg>
    <arg>-N <replaceable>servicename</replaceable></arg>
+
   </cmdsynopsis>
  </refsynopsisdiv>
 
@@ -261,12 +274,22 @@ PostgreSQL documentation
       </listitem>
      </varlistentry>
 
+     <varlistentry>
+      <term><option>-t</option></term>
+      <listitem>
+       <para>
+        The number of seconds to wait when waiting for start or shutdown
+        to complete.
+       </para>
+      </listitem>
+     </varlistentry>
+
      <varlistentry>
       <term><option>-w</option></term>
       <listitem>
        <para>
-        Wait for the start or shutdown to complete.  Times out after
-        60 seconds.  This is the default for shutdowns. A successful 
+        Wait for the start or shutdown to complete.  The default wait time
+        is 60 seconds.  This is the default option for shutdowns. A successful 
         shutdown is indicated by removal of the <acronym>PID</acronym> 
         file. For starting up, a successful <command>psql -l</command> 
         indicates success. <command>pg_ctl</command> will attempt to 
diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c
index 95adf93b2d..83f4c86263 100644
--- a/src/bin/pg_ctl/pg_ctl.c
+++ b/src/bin/pg_ctl/pg_ctl.c
@@ -4,7 +4,7 @@
  *
  * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/bin/pg_ctl/pg_ctl.c,v 1.85 2007/10/31 10:55:25 petere Exp $
+ * $PostgreSQL: pgsql/src/bin/pg_ctl/pg_ctl.c,v 1.86 2007/11/10 21:48:51 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1465,21 +1465,22 @@ do_help(void)
 	printf(_("%s is a utility to start, stop, restart, reload configuration files,\n"
 			 "report the status of a PostgreSQL server, or signal a PostgreSQL process.\n\n"), progname);
 	printf(_("Usage:\n"));
-	printf(_("  %s start   [-w] [-D DATADIR] [-s] [-l FILENAME] [-o \"OPTIONS\"]\n"), progname);
+	printf(_("  %s start   [-w] [-t secs] [-D DATADIR] [-s] [-l FILENAME] [-o \"OPTIONS\"]\n"), progname);
 	printf(_("  %s stop    [-W] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]\n"), progname);
-	printf(_("  %s restart [-w] [-D DATADIR] [-s] [-m SHUTDOWN-MODE] [-o \"OPTIONS\"]\n"), progname);
+	printf(_("  %s restart [-w] [-t secs] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]\n                   [-o \"OPTIONS\"]\n"), progname);
 	printf(_("  %s reload  [-D DATADIR] [-s]\n"), progname);
 	printf(_("  %s status  [-D DATADIR]\n"), progname);
 	printf(_("  %s kill    SIGNALNAME PID\n"), progname);
 #if defined(WIN32) || defined(__CYGWIN__)
 	printf(_("  %s register   [-N SERVICENAME] [-U USERNAME] [-P PASSWORD] [-D DATADIR]\n"
-			 "                    [-w] [-o \"OPTIONS\"]\n"), progname);
+			 "                    [-w] [-t timeout] [-o \"OPTIONS\"]\n"), progname);
 	printf(_("  %s unregister [-N SERVICENAME]\n"), progname);
 #endif
 
 	printf(_("\nCommon options:\n"));
 	printf(_("  -D, --pgdata DATADIR   location of the database storage area\n"));
 	printf(_("  -s, --silent           only print errors, no informational messages\n"));
+	printf(_("  -t secs                seconds to wait when using -w option\n"));
 	printf(_("  -w                     wait until operation completes\n"));
 	printf(_("  -W                     do not wait until operation completes\n"));
 	printf(_("  --help                 show this help, then exit\n"));
@@ -1592,6 +1593,7 @@ main(int argc, char **argv)
 		{"mode", required_argument, NULL, 'm'},
 		{"pgdata", required_argument, NULL, 'D'},
 		{"silent", no_argument, NULL, 's'},
+		{"timeout", required_argument, NULL, 't'},
 		{"core-files", no_argument, NULL, 'c'},
 		{NULL, 0, NULL, 0}
 	};
@@ -1657,7 +1659,7 @@ main(int argc, char **argv)
 	/* process command-line options */
 	while (optind < argc)
 	{
-		while ((c = getopt_long(argc, argv, "cD:l:m:N:o:p:P:sU:wW", long_options, &option_index)) != -1)
+		while ((c = getopt_long(argc, argv, "cD:l:m:N:o:p:P:st:U:wW", long_options, &option_index)) != -1)
 		{
 			switch (c)
 			{
@@ -1704,6 +1706,9 @@ main(int argc, char **argv)
 				case 's':
 					silent_mode = true;
 					break;
+				case 't':
+					wait_seconds = atoi(optarg);
+					break;
 				case 'U':
 					if (strchr(optarg, '\\'))
 						register_username = xstrdup(optarg);
-- 
2.24.1