Merged in master and stable-2.7, thanks! Jérémie
On Thu, Mar 10, 2016 at 11:13 AM, Mathieu Desnoyers <mathieu.desnoy...@efficios.com> wrote: > Ensure that SIGKILL being received only by some consumer processes don't > trigger clean shutdown of other consumer processes (due to hang up of > communication FD by the session daemon). > > Fix this by invoking a SIGSTOP on both sessiond and consumerd, and wait > until we see those process state change to "stopped" before proceeding > to send the SIGKILL. > > Signed-off-by: Mathieu Desnoyers <mathieu.desnoy...@efficios.com> > CC: Jonathan Rajotte <jonathan.rajotte-jul...@efficios.com> > CC: Jérémie Galarneau <jeremie.galarn...@efficios.com> > --- > tests/regression/tools/crash/test_crash | 5 +- > tests/utils/utils.sh | 117 > +++++++++++++++++++++++++++++++- > 2 files changed, 119 insertions(+), 3 deletions(-) > > diff --git a/tests/regression/tools/crash/test_crash > b/tests/regression/tools/crash/test_crash > index be61cda..5b9a27c 100755 > --- a/tests/regression/tools/crash/test_crash > +++ b/tests/regression/tools/crash/test_crash > @@ -31,7 +31,7 @@ NR_ITER=-1 > # Temp file output > OUTPUT_DIR=$(mktemp -d) > > -NUM_TESTS=71 > +NUM_TESTS=73 > > source $TESTDIR/utils/utils.sh > > @@ -360,6 +360,9 @@ function test_lttng_crash_extraction_sigkill() > # Generate 10 events > $TESTAPP_BIN 10 0 > > + sigstop_lttng_sessiond > + sigstop_lttng_consumerd > + > # Kill the consumers then sessiond with sigkill > stop_lttng_consumerd SIGKILL > stop_lttng_sessiond SIGKILL > diff --git a/tests/utils/utils.sh b/tests/utils/utils.sh > index 3964e3b..2cadd58 100644 > --- a/tests/utils/utils.sh > +++ b/tests/utils/utils.sh > @@ -416,7 +416,9 @@ function stop_lttng_sessiond_opt() > if [ -n "$2" ]; then > kill_opt="$kill_opt -s $signal" > fi > - > + if [ $withtap -eq "1" ]; then > + diag "Killing lt-$SESSIOND_BIN pids: $(echo $PID_SESSIOND | > tr '\n' ' ')" > + fi > kill $kill_opt $PID_SESSIOND 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST > > if [ $? -eq 1 ]; then > @@ -450,6 +452,62 @@ function stop_lttng_sessiond_notap() > stop_lttng_sessiond_opt 0 "$@" > } > > +function sigstop_lttng_sessiond_opt() > +{ > + local withtap=$1 > + local signal=SIGSTOP > + local kill_opt="" > + > + if [ -n $TEST_NO_SESSIOND ] && [ "$TEST_NO_SESSIOND" == "1" ]; then > + # Env variable requested no session daemon > + return > + fi > + > + PID_SESSIOND=`pgrep --full lt-$SESSIOND_BIN` > + > + kill_opt="$kill_opt -s $signal" > + > + if [ $withtap -eq "1" ]; then > + diag "Sending SIGSTOP to lt-$SESSIOND_BIN pids: $(echo > $PID_SESSIOND | tr '\n' ' ')" > + fi > + kill $kill_opt $PID_SESSIOND 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST > + > + if [ $? -eq 1 ]; then > + if [ $withtap -eq "1" ]; then > + fail "Sending SIGSTOP to session daemon" > + fi > + else > + out=1 > + while [ $out -ne 0 ]; do > + pid=$(pgrep --full lt-$SESSIOND_BIN) > + > + # Wait until state becomes stopped for session > + # daemon(s). > + out=0 > + for sessiond_pid in $pid; do > + state=$(ps -p $sessiond_pid -o state= ) > + if [[ -n "$state" && "$state" != "T" ]]; then > + out=1 > + fi > + done > + sleep 0.5 > + done > + if [ $withtap -eq "1" ]; then > + pass "Sending SIGSTOP to session daemon" > + fi > + fi > +} > + > +function sigstop_lttng_sessiond() > +{ > + sigstop_lttng_sessiond_opt 1 "$@" > +} > + > +function sigstop_lttng_sessiond_notap() > +{ > + sigstop_lttng_sessiond_opt 0 "$@" > +} > + > function stop_lttng_consumerd_opt() > { > local withtap=$1 > @@ -463,7 +521,7 @@ function stop_lttng_consumerd_opt() > fi > > if [ $withtap -eq "1" ]; then > - diag "Killing lttng-consumerd (pid: $PID_CONSUMERD)" > + diag "Killing $CONSUMERD_BIN pids: $(echo $PID_CONSUMERD | tr > '\n' ' ')" > fi > kill $kill_opt $PID_CONSUMERD 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST > retval=$? > @@ -507,6 +565,61 @@ function stop_lttng_consumerd_notap() > stop_lttng_consumerd_opt 0 "$@" > } > > +function sigstop_lttng_consumerd_opt() > +{ > + local withtap=$1 > + local signal=SIGSTOP > + local kill_opt="" > + > + PID_CONSUMERD=`pgrep --full $CONSUMERD_BIN` > + > + kill_opt="$kill_opt -s $signal" > + > + if [ $withtap -eq "1" ]; then > + diag "Sending SIGSTOP to $CONSUMERD_BIN pids: $(echo > $PID_CONSUMERD | tr '\n' ' ')" > + fi > + kill $kill_opt $PID_CONSUMERD 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST > + retval=$? > + set +x > + > + if [ $? -eq 1 ]; then > + if [ $withtap -eq "1" ]; then > + fail "Sending SIGSTOP to consumer daemon" > + fi > + return 1 > + else > + out=1 > + while [ $out -ne 0 ]; do > + pid=$(pgrep --full $CONSUMERD_BIN) > + > + # Wait until state becomes stopped for all > + # consumers. > + out=0 > + for consumer_pid in $pid; do > + state=$(ps -p $consumer_pid -o state= ) > + if [[ -n "$state" && "$state" != "T" ]]; then > + out=1 > + fi > + done > + sleep 0.5 > + done > + if [ $withtap -eq "1" ]; then > + pass "Sending SIGSTOP to consumer daemon" > + fi > + fi > + return $retval > +} > + > +function sigstop_lttng_consumerd() > +{ > + sigstop_lttng_consumerd_opt 1 "$@" > +} > + > +function sigstop_lttng_consumerd_notap() > +{ > + sigstop_lttng_consumerd_opt 0 "$@" > +} > + > function list_lttng_with_opts () > { > local opts=$1 > -- > 2.1.4 > -- Jérémie Galarneau EfficiOS Inc. http://www.efficios.com _______________________________________________ lttng-dev mailing list lttng-dev@lists.lttng.org https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev