#!/bin/sh
#
# Ensure that strace can detach from running processes.
#
# Copyright (c) 2013-2015 Dmitry V. Levin <ldv@altlinux.org>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. The name of the author may not be used to endorse or promote products
#    derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

. "${srcdir=.}/init.sh"

run_prog_skip_if_failed \
	kill -0 $$

check_prog sleep

set -e

./set_ptracer_any sh -c "echo > $LOG; while :; do :; done" > /dev/null &

while ! [ -s "$LOG" ]; do
	kill -0 $! 2> /dev/null ||
		fail_ 'set_ptracer_any sh failed'
	$SLEEP_A_BIT
done

tracee_pid=$!

cleanup()
{
	set +e
	kill $tracee_pid
	wait $tracee_pid 2> /dev/null
	return 0
}

rm -f "$LOG"
$STRACE -p $tracee_pid 2> "$LOG" &

while ! grep -F "Process $tracee_pid attached" "$LOG" > /dev/null; do
	kill -0 $! 2> /dev/null || {
		cleanup
		dump_log_and_fail_with "$STRACE -p failed to attach"
	}
	$SLEEP_A_BIT
done

kill -INT $!
wait $!

grep -F "Process $tracee_pid detached" "$LOG" > /dev/null || {
		cleanup
		dump_log_and_fail_with "$STRACE -p failed to detach"
	}

if [ -f /proc/self/status ]; then
	$SLEEP_A_BIT
	test -d /proc/$tracee_pid || {
		cleanup
		dump_log_and_fail_with 'tracee died after detach'
	}
	grep '^State:.*R (running)' < /proc/$tracee_pid/status > /dev/null || {
		grep '^State:' < /proc/$tracee_pid/status
		cleanup
		dump_log_and_fail_with 'tracee is not running after detach'
	}
fi

cleanup
exit 0
