ustd: unwrite the subbuffer if the put() was unsuccessful and we are going to crash...
[ust.git] / usttrace
index a60440c8e0039e4feee4ae0e9f3629cb3020372e..c90ee9d8e44f64cf81a443155c3610f7675c6151 100755 (executable)
--- a/usttrace
+++ b/usttrace
@@ -7,6 +7,22 @@ function error() {
        echo "$0: error: $1" 2>/dev/stderr
 }
 
+function sighandler() {
+       echo "Caught Ctrl-C"
+       if [ -z "$USTDPID" ]; then
+               USTDPID="$(<$pidfilepath)"
+       fi
+       # Tell the daemon to die
+       kill -SIGTERM "$USTDPID"
+
+       echo "Waiting for ustd to shutdown..."
+       wait "$USTDPID"
+
+       rm "$pidfilepath"
+
+       exit 0;
+}
+
 USTTRACE_DIR="$(dirname $0)"
 if [ -x "${USTTRACE_DIR}/ustd/ustd" ] ; then
     # Use the not installed libraries instead
@@ -84,6 +100,7 @@ USTDSOCKPATH="/tmp/ustd-sock-$$"
 if [ "$arg_syswide_daemon" != "1" ];
 then
        pidfilepath="/tmp/usttrace-$USER-$(date +%Y%m%d%H%M%S%N)-ustd-pid"
+       trap "sighandler $pidfilepath" SIGINT
        mkfifo -m 0600 "$pidfilepath"
        # Start daemon
        $USTD --pidfile "$pidfilepath" -s "$USTDSOCKPATH" -o "$OUTDIR" >"$OUTDIR/ustd.log" 2>&1 &
@@ -128,12 +145,6 @@ fi
        export LD_PRELOAD="$LD_PRELOAD:$LIBINTERFORK_PATH"
     fi
 
-# Install a handler for SIGIO. This is the signal that will be sent by ustd to
-# the traced program to trigger the creation of its listener thread. However,
-# it is possible that the SIGIO will be sent after the shell fork, but before
-# the exec of the command. If this handler isn't there, bash might terminate
-# because of a unhandled signal.
-
 # Execute the command
     $CMD 2>&1
 ) | tee "$OUTDIR/app.log"
This page took 0.022327 seconds and 4 git commands to generate.