Fix waiting for ustd on shutdown
[ust.git] / usttrace
index c77f73114ae97d6e2db7f431f4f03c9714a17dd7..b3af05d7a167cb4da41507e09cd8230264f025af 100755 (executable)
--- a/usttrace
+++ b/usttrace
@@ -3,13 +3,14 @@
 # usttrace  by Pierre-Marc Fournier 2009
 # Distributed under the GPLv2.
 
-USTD="./ustd/ustd"
-LIBINTERFORK_PATH="./libinterfork/.libs/libinterfork.so"
-LIBMALLOCWRAP_PATH="./libmallocwrap/.libs/libmallocwrap.so"
+USTTRACE_DIR="$(dirname $0)"
+USTD="${USTTRACE_DIR}/ustd/ustd"
+LIBINTERFORK_PATH="${USTTRACE_DIR}/libinterfork/.libs/libinterfork.so"
+LIBMALLOCWRAP_PATH="${USTTRACE_DIR}/libmallocwrap/.libs/libmallocwrap.so"
 
-STD_LDLIBRARY_UST="./libust/.libs:../liburcu"
+STD_LDLIBRARY_UST="${USTTRACE_DIR}/libust/.libs"
 
-BASE_TRACE_DIR="$HOME/.usttraces"
+BASE_TRACE_DIR="${HOME}/.usttraces"
 
 function usage () {
        echo "usage:  $0 OPTIONS COMMAND" 2>/dev/stderr
@@ -36,14 +37,20 @@ while getopts ":hlLmfs" options; do
                s) arg_syswide_daemon=1;;
                h) usage;
                   exit 0;;
-               \?) echo $usage
+               \?) usage
                        exit 1;;
-               *) echo $usage
+               *) usage
                        exit 1;;
        esac
 done
 shift $(($OPTIND - 1))
 
+if [ ! -x "$USTD" ];
+then
+       error "specified path to ustd not executable ($USTD)"
+       exit 1
+fi
+
 # Prepare vars
 CMD=$1
 
@@ -70,18 +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"
+       mkfifo -m 0600 "$pidfilepath"
        # 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?
-sleep 0.5
-
 # Establish the environment for the command
 export UST_TRACE=1
 export UST_AUTOPROBE=1
@@ -126,7 +129,9 @@ then
        kill -SIGTERM "$USTDPID"
 
        echo "Waiting for ustd to shutdown..."
-       wait "$USTDPID"
+       wait
+
+       rm "$pidfilepath"
 fi
 
 echo "Trace was output in: " $OUTDIR
This page took 0.023004 seconds and 4 git commands to generate.