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.
if [ "$arg_syswide_daemon" != "1" ];
then
if [ "$arg_syswide_daemon" != "1" ];
then
+ pidfilepath="/tmp/usttrace-$USER-$(date +%Y%m%d%H%M%S%N)-ustd-pid"
+
- $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
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
# Establish the environment for the command
export UST_TRACE=1
export UST_AUTOPROBE=1
echo "Waiting for ustd to shutdown..."
wait "$USTDPID"
echo "Waiting for ustd to shutdown..."
wait "$USTDPID"
fi
echo "Trace was output in: " $OUTDIR
fi
echo "Trace was output in: " $OUTDIR