Udiff functions.ksh
--- /workspace/neilga/ohacds-ids/webrev/usr/src/cmd/ha-services/gds-agents/ids/functions.ksh-   Thu Apr 24 01:39:14 2008
+++ functions.ksh       Fri Apr 18 06:08:15 2008
@@ -396,11 +396,11 @@
           # therefore we'll perform our own.
 
           if [ "${CALLER}" = "SMF" ]
           then
                smf_wait_for_online
-               rc=?
+               rc=$?
           fi
        else
           # SCMSGS
           # @explanation
           # The specified Informix Server failed to start.
@@ -657,10 +657,16 @@
 smf_wait_for_online()
 {
        debug_message "Function: smf_wait_for_online - Begin"
        ${SET_DEBUG}
 
+       # In order to ensure that the SMF service is really online, we need
+       # to check getstate() and check_ids(). However, we need to enforce
+       # an SMF_EXIT_ERR_CONFIG if we are just about to timeout. If we do not
+       # do this, then svc.startd will try to restart the SMF service three
+       # times. Essentially we need Sun Cluster to do that.
+
        MAX_START_TIMEOUT=`/usr/bin/expr ${START_TIMEOUT} \* 95 \/ 100`
        SECONDS=0
 
        while  [ "${SECONDS}" -lt "${MAX_START_TIMEOUT}" ]
        do
@@ -674,11 +680,12 @@
 
           if [ "${rc}" -eq 0 ]
           then
                SECONDS=${MAX_START_TIMEOUT}
           else
-               sleep 5
+               rc=${SMF_EXIT_ERR_CONFIG}
+               sleep 2
           fi
        done
 
        debug_message "Function: smf_wait_for_online - End"
        return ${rc}
@@ -721,13 +728,13 @@
                        SHMID=`/usr/bin/echo ${SHMID} | /usr/xpg4/bin/tr 'm' ' '`
 
                        # As the initial ipcs -mcopbZ is only a snapshot in time, Informix
                        # may have already cleaned up. Therefore the following attempt to remove a 
                        # shared memory segment may fail with "not found". To prevent misleading 
-                       # console messages stdout/stderr is redirected to ${LOGFILE}. 
+                       # console messages stdout/stderr is redirected to /dev/null. 
 
-                       /usr/bin/ipcrm -z ${ZONENAME} -m ${SHMID} > ${LOGFILE}
+                       /usr/bin/ipcrm -z ${ZONENAME} -m ${SHMID} > /dev/null 2>&1
 
                        debug_message "Informix SHMID: ${SHMID} - removed"
 
                        flag=deleted
                   fi