| source `dirname $0`/util.sh |
| |
| NEST_EXE=nested_detach_wait |
| SLEEP_EXE=nested_detach_kill_stuck |
| SYNC_TOKEN=sleeping |
| WAIT_SECS=1 |
| |
| mkdir $workdir/inner |
| RECORD_ARGS="--wait --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 |
| |
| rrpid=$(parent_pid_of $(pidof $NEST_EXE-$nonce)) |
| echo " done. Delivering SIGTERM to $rrpid ..." |
| kill -TERM $rrpid |
| |
| echo " done." |
| |
| # Wait for 'record' to actually terminate. |
| wait |
| |
| # 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 |