usttrace: use ustd in daemon mode, sparing a sleep and removing a race
authorPierre-Marc Fournier <pierre-marc.fournier@polymtl.ca>
Tue, 13 Oct 2009 23:16:33 +0000 (19:16 -0400)
committerPierre-Marc Fournier <pierre-marc.fournier@polymtl.ca>
Tue, 13 Oct 2009 23:16:33 +0000 (19:16 -0400)
The race was that usttrace waited for 0.5s for the daemon (started in
background) to settle before starting the command to trace. If the
daemon needed more than 0.5s to settle, the connection would fail.

Now, it is guaranteed to succeed.

usttrace

index 689cdded2f66b3289f661e2f9ed003a5a9038ac9..fe8a5cd8f8c47f80a53a72164c1ac8852d20a1a3 100755 (executable)
--- a/usttrace
+++ b/usttrace
@@ -77,21 +77,14 @@ SOCKPATH="/tmp/ust-sock-$$"
 
 if [ "$arg_syswide_daemon" != "1" ];
 then
+       pidfilepath="/tmp/usttrace-$USER-$(date +%Y%m%d%H%M%S%N)-ustd-pid"
+
        # Start daemon
-       $USTD -s "$SOCKPATH" -o "$OUTDIR" 2>&1 >"$OUTDIR/ustd.log" &
-       USTDPID="$!"
+       $USTD -d --pidfile "$pidfilepath" -s "$SOCKPATH" -o "$OUTDIR" >"$OUTDIR/ustd.log" 2>&1 &
+       USTDPID="$(<$pidfilepath)"
        export UST_DAEMON_SOCKET="$SOCKPATH"
 fi
 
-# Wait for the daemon to settle
-# If we don't, the process may try to connect to its socket before
-# it's ready.
-# FIXME: is there a way to make sure this works every time? Yes,
-# we could have a mode where ustd daemonizes itself. Therefore
-# by the time the control returns to the console, it's ready.
-
-sleep 0.5
-
 # Establish the environment for the command
 export UST_TRACE=1
 export UST_AUTOPROBE=1
@@ -137,6 +130,8 @@ then
 
        echo "Waiting for ustd to shutdown..."
        wait "$USTDPID"
+
+       rm "$pidfilepath"
 fi
 
 echo "Trace was output in: " $OUTDIR
This page took 0.025777 seconds and 4 git commands to generate.