blob: e46c9ed621dccd3c840556a57df50b7431266bf4 [file] [log] [blame]
source `dirname $0`/util.sh
NEST_EXE=nested_detach_wait
SLEEP_EXE=term_trace_syscall
SYNC_TOKEN=sleeping
WAIT_SECS=1
mkdir $workdir/inner
RECORD_ARGS="--env=_RR_TRACE_DIR=$workdir/inner"
save_exe "$NEST_EXE"
save_exe "$SLEEP_EXE"
touch record.out
just_record $NEST_EXE-$nonce "$(which rr) record --nested=detach $PWD/$SLEEP_EXE-$nonce" &
SUB_ID=$!
echo "Waiting for token '$SYNC_TOKEN' from tracee ..."
until grep -q $SYNC_TOKEN record.out; do
sleep 0
if ! kill -0 "$SUB_ID" >/dev/null 2>&1; then failed "subshell died, no need to longer wait for '$SYNC_TOKEN'"; exit; fi
done
sleep_pid=$(pidof $SLEEP_EXE-$nonce)
nested_rr_pid=$(parent_pid_of $sleep_pid)
echo " done. Delivering SIGSTOP to nested rr $nested_rr_pid ..."
kill -STOP $nested_rr_pid
# Sleep a bit because if we issue the CONT immediately rr doesn't even notice
sleep 1
echo " done. Delivering SIGCONT to nested rr $nested_rr_pid ..."
kill -CONT $nested_rr_pid
echo " done. Delivering SIGTERM to sleeping $sleep_pid ..."
kill -TERM $sleep_pid
# Wait for 'record' to actually terminate.
wait $SUB_ID || failed "Recording failed: $?"
# Replay outer
replay
# Replay inner
cd $workdir/inner
workdir_orig=$workdir
workdir=$PWD
wait_for_complete
replay
check_replay_token $SYNC_TOKEN
workdir=$workdir_orig