ovs-lib: Return the exit status of ovs-ctl in ovs_ctl().
[sliver-openvswitch.git] / utilities / ovs-lib.in
index 01f4ded..0b6f42f 100644 (file)
@@ -37,6 +37,36 @@ else
     dbdir='@DBDIR@'
 fi
 
+ovs_ctl_log () {
+    echo "$@" >> "${logdir}/ovs-ctl.log"
+}
+
+stdintoexitstatus () {
+    read exitstatus
+    return $exitstatus
+}
+
+ovs_ctl () {
+    case "$@" in
+        *"=strace"*)
+            # In case of running the daemon with strace, piping the o/p causes
+            # the script to block (strace probably does not close the inherited
+            # pipe). So, do not log the o/p to ovs-ctl.log.
+            "${datadir}/scripts/ovs-ctl" "$@"
+        ;;
+        *)
+            # Tee ovs-ctl output to ovs-ctl.log and yield ovs-ctl's exit
+            # status. See (line wrapped)
+            # http://unix.stackexchange.com/questions/14270/\
+            # get-exit-status-of-process-thats-piped-to-another/70675#70675
+            echo "`date -u`:$@" >> "${logdir}/ovs-ctl.log"
+            ( ( ( ( ("${datadir}/scripts/ovs-ctl" "$@"  2>&1 ; echo $? >&3) \
+            | tee -a "${logdir}/ovs-ctl.log") >&4) 3>&1) | stdintoexitstatus) \
+            4>&1
+        ;;
+    esac
+}
+
 VERSION='@VERSION@'
 
 DAEMON_CWD=/
@@ -140,6 +170,9 @@ start_daemon () {
                 log_failure_msg "strace not installed, running $daemon without it"
             fi
             ;;
+        glibc)
+            set env MALLOC_CHECK_=2 MALLOC_PERTURB_=165 "$@"
+            ;;
         '')
             ;;
         *)
@@ -164,7 +197,10 @@ start_daemon () {
 stop_daemon () {
     if test -e "$rundir/$1.pid"; then
         if pid=`cat "$rundir/$1.pid"`; then
-            for action in TERM .1 .25 .65 1 1 1 1 KILL 1 1 1 1 FAIL; do
+            for action in TERM .1 .25 .65 1 1 1 1 KILL 1 1 1 2 10 15 30 FAIL; do
+                if pid_exists "$pid" >/dev/null 2>&1; then :; else
+                    return 0
+                fi
                 case $action in
                     TERM)
                         action "Killing $1 ($pid)" kill $pid
@@ -177,11 +213,7 @@ stop_daemon () {
                         return 1
                         ;;
                     *)
-                        if pid_exists $pid >/dev/null 2>&1; then
-                            sleep $action
-                        else
-                            return 0
-                        fi
+                        sleep $action
                         ;;
                 esac
             done