56 lines
1.4 KiB
Bash
Executable File
56 lines
1.4 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Run valgrind's memory checker against a process using the --watchfd
|
|
# option.
|
|
|
|
# Dummy assignments for "shellcheck".
|
|
sourcePath="${sourcePath:-.}"; testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}"; workFile3="${workFile3:-.tmp3}"; workFile4="${workFile4:-.tmp4}"
|
|
|
|
# Load the valgrind function.
|
|
. "${sourcePath}/tests/run-valgrind.sh"
|
|
|
|
# Skip the test if "-d" is not available.
|
|
if ! "${testSubject}" -h | grep -Fq ' -d'; then
|
|
echo "no \`--watchfd' / \`-d' option on this platform"
|
|
exit 77
|
|
fi
|
|
|
|
# Skip the test if "-d" does not work.
|
|
sleep 2 &
|
|
sleep 0.1
|
|
"${testSubject}" -d "${pid}" -f -i 0.5 >/dev/null 2>"${workFile1}"
|
|
if grep -Fq ' -d: not available' "${workFile1}"; then
|
|
echo "no \`--watchfd' / \`-d' option on this platform"
|
|
exit 77
|
|
fi
|
|
|
|
# Check "--watchfd PID:FD".
|
|
# See the "Watchfd" tests for more detail.
|
|
seq 1 100 > "${workFile1}"
|
|
(export line; sleep 1; read -r line; sleep 1; read -r line; sleep 1) <"${workFile1}" &
|
|
pid=$!
|
|
sleep 0.1
|
|
{ runWithValgrind -d "${pid}:0" -f -i 0.5 >/dev/null 2>&1; } 4>&1 || exit 1
|
|
|
|
# Check "--watchfd PID".
|
|
seq 1 100 > "${workFile1}"
|
|
seq 1 300 > "${workFile2}"
|
|
(
|
|
export line
|
|
sleep 1
|
|
read -r line
|
|
exec 9<"${workFile2}"
|
|
sleep 1
|
|
exec 8<"${workFile1}"
|
|
exec 7</dev/null
|
|
sleep 1
|
|
exec 9<&-
|
|
read -r line
|
|
sleep 1
|
|
) <"${workFile1}" &
|
|
pid=$!
|
|
sleep 0.1
|
|
{ runWithValgrind -d "${pid}" -f -i 0.5 >/dev/null 2>&1; } 4>&1 || exit 1
|
|
|
|
exit 0
|