--- resources/OCF/pgsql.in.orig	2007-02-23 12:01:01.000000000 -0500
+++ resources/OCF/pgsql.in	2007-02-23 12:39:17.000000000 -0500
@@ -19,6 +19,8 @@
 #  OCF_RESKEY_pgport - Port where PostgreSQL is listening
 #  OCF_RESKEY_pgdb   - database to monitor. Default is template1
 #  OCF_RESKEY_logfile - Path to PostgreSQL log file. Default is /dev/null
+#  OCF_RESKEY_start_wait - Start waiting time. Default is 30
+#  OCF_RESKEY_stop_wait - Stop waiting time. Default is 30
 ###############################################################################
 # Initialization:
 
@@ -128,6 +130,20 @@
 <shortdesc lang="en">logfile</shortdesc>
 <content type="string" default="/dev/null" />
 </parameter>
+<parameter name="start_wait" unique="0" required="0">
+<longdesc lang="en">
+Start waiting time.
+</longdesc>
+<shortdesc lang="en">start_wait</shortdesc>
+<content type="string" default="30" />
+</parameter>
+<parameter name="stop_wait" unique="0" required="0">
+<longdesc lang="en">
+Stop waiting time.
+</longdesc>
+<shortdesc lang="en">stop_wait</shortdesc>
+<content type="string" default="30" />
+</parameter>
 </parameters>
 
 <actions>
@@ -196,17 +212,21 @@
 	ocf_log err "$PGCTL not found!"
 	return $OCF_ERR_GENERIC
     fi
-	
-    if ! pgsql_status
-    then
-	sleep 5
-	if ! pgsql_status
-	then	
-	    echo "ERROR: PostgreSQL is not running!"
-            return $OCF_ERR_GENERIC
-	fi
-    fi
 
+    started=1; count=0
+    while [ $started -ne 0 ]
+    do
+        sleep 1
+        (( count=count+1 ))
+        if [ $count -eq $START_WAIT ]
+        then
+            echo "ERROR: PostgreSQL is not running!"
+            return $OCF_ERR_GENERIC
+        fi
+        pgsql_monitor
+        started=$?
+    done
+	
     return $OCF_SUCCESS
 }
 
@@ -220,13 +240,20 @@
     
     # Stop PostgreSQL do not wait for clients to disconnect
     runasowner "$PGCTL -D $PGDATA stop -m fast > /dev/null 2>&1"
+    
+    count=0
+    while pgsql_status
+    do
+       (( count=count+1 ))
+       if [ $count -eq $STOP_WAIT ]
+       then
+          #PostgreSQL is still up. Use another shutdown mode.
+          runasowner "$PGCTL -D $PGDATA stop -m immediate > /dev/null 2>&1"
+          break
+       fi
+    done
 
-    if pgsql_status
-    then
-       #PostgreSQL is still up. Use another shutdown mode.
-       runasowner "$PGCTL -D $PGDATA stop -m immediate > /dev/null 2>&1"
-    fi
-
+    rm -f $PIDFILE    
     return $OCF_SUCCESS
 }
 
@@ -348,6 +375,8 @@
 PGDB=${OCF_RESKEY_pgdb:-template1}
 LOGFILE=${OCF_RESKEY_logfile:-/dev/null}
 PIDFILE=${PGDATA}/postmaster.pid
+START_WAIT=${OCF_RESKEY_start_wait:-"30"}
+STOP_WAIT=${OCF_RESKEY_stop_wait:-"30"}
 
 case "$1" in
     methods)    pgsql_methods
