ovs-lib: Support old versions of strace.
authorEthan Jackson <ethan@nicira.com>
Thu, 28 Jun 2012 21:55:55 +0000 (14:55 -0700)
committerEthan Jackson <ethan@nicira.com>
Thu, 5 Jul 2012 23:57:04 +0000 (16:57 -0700)
The ovs-lib strace wrapper requires the -D (run tracer process as a
detached grandchild, not as parent) option which does not exist in
older versions.  This patch falls back to attaching to the running
process when the -D option does not exists.

Signed-off-by: Ethan Jackson <ethan@nicira.com>
utilities/ovs-lib.in

index 04ab85abd9dcf366f00ed98e72d50ae6677c88fc..3905a846fd84d3884cf7ab6695e4c367de96bff3 100644 (file)
@@ -91,6 +91,7 @@ start_daemon () {
     wrapper=$2
     shift; shift
     daemon=$1
+    strace=""
 
     # drop core files in a sensible place
     test -d "$DAEMON_CWD" || install -d -m 755 -o root -g root "$DAEMON_CWD"
@@ -118,7 +119,12 @@ start_daemon () {
             ;;
         strace)
             if (strace -V) > /dev/null 2>&1; then
-                set strace -tt -T -s 256 -D -ff -o "$logdir/$daemon.strace.log" "$@"
+                strace="strace -tt -T -s 256 -ff"
+                if (strace -DV) > /dev/null 2>&1; then
+                    # Has the -D option.
+                    set $strace -D -o "$logdir/$daemon.strace.log" "$@"
+                    strace=""
+                fi
             else
                 log_failure_msg "strace not installed, running $daemon without it"
             fi
@@ -136,6 +142,12 @@ start_daemon () {
     fi
 
     action "Starting $daemon" "$@"
+
+    if test X"$strace" != X; then
+        # Strace doesn't have the -D option so we attach after the fact.
+        setsid $strace -o "$logdir/$daemon.strace.log" \
+            -p `cat $rundir/$daemon.pid` > /dev/null 2>&1 &
+    fi
 }
 
 DAEMON_CWD=/