This pattern is fundamentally racy:
$TESTAPP_BIN $NR_ITER $NR_USEC_WAIT >/dev/null 2>&1 &
[...]
while [ -n "$(pidof $TESTAPP_BIN)" ]; do
sleep 1
done
pass "Wait for application end"
[...]
tracing_teardown
validate_trace $EXACT_EVENT_COUNT
It is possible that the check for "pidof $TESTAPP_BIN" occurs _before_
the execve() of the applications (starting the applications in background
with & is basically a clone() + execve()). The consequence is that the check
succeed, never waiting for any applications to finish and then the tracing
sessions are prematurely teared down. Thus the resulting trace contains only
some events. We then validate for a fixed number of events and thus the test
fails caused by this racy scheduling situation.
The fix is to start the applications in foreground instead of background.
Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
NR_ITER=100
NR_USEC_WAIT=1
TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
NR_ITER=100
NR_USEC_WAIT=1
source $TESTDIR/utils/utils.sh
source $TESTDIR/utils/utils.sh
- $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT >/dev/null 2>&1 &
-}
-
-function wait_apps
-{
- while [ -n "$(pidof $BIN_NAME)" ]; do
- sleep 1
- done
- pass "Wait for application end"
+ $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT >/dev/null 2>&1
}
function test_exclusion
}
function test_exclusion
# Trace apps
start_lttng_tracing $SESSION_NAME
run_apps
# Trace apps
start_lttng_tracing $SESSION_NAME
run_apps
stop_lttng_tracing $SESSION_NAME
# Destroy session
stop_lttng_tracing $SESSION_NAME
# Destroy session
SESSION_NAME="valid_filter"
EVENT_NAME="tp:tptest"
NR_ITER=100
SESSION_NAME="valid_filter"
EVENT_NAME="tp:tptest"
NR_ITER=100
source $TESTDIR/utils/utils.sh
source $TESTDIR/utils/utils.sh
- ./$CURDIR/$BIN_NAME $NR_ITER & >/dev/null 2>&1
-}
-
-function wait_apps
-{
- while [ -n "$(pidof $BIN_NAME)" ]; do
- sleep 1
- done
- pass "Wait for application end"
+ ./$CURDIR/$BIN_NAME $NR_ITER >/dev/null 2>&1
}
function test_valid_filter
}
function test_valid_filter
# Trace apps
start_lttng_tracing $SESSION_NAME
run_apps
# Trace apps
start_lttng_tracing $SESSION_NAME
run_apps
stop_lttng_tracing $SESSION_NAME
# Destroy session
stop_lttng_tracing $SESSION_NAME
# Destroy session
TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
STATS_BIN="$TESTDIR/utils/babelstats.pl"
TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
STATS_BIN="$TESTDIR/utils/babelstats.pl"
BAIL_OUT "No UST events binary detected."
fi
BAIL_OUT "No UST events binary detected."
fi
-function wait_apps
-{
- while [ -n "$(pidof $TESTAPP_NAME)" ]; do
- sleep 0.5
- done
- pass "Wait for applications to end"
-}
-
function enable_lttng_channel_count_limit ()
{
sess_name="$1"
function enable_lttng_channel_count_limit ()
{
sess_name="$1"
start_lttng_tracing $session_name
start_lttng_tracing $session_name
- $TESTAPP_BIN $num_iter >/dev/null 2>&1 &
-
- wait_apps
+ $TESTAPP_BIN $num_iter >/dev/null 2>&1
stop_lttng_tracing $session_name
stop_lttng_tracing $session_name
TESTAPP_NAME="gen-ust-events"
TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
TESTAPP_NAME="gen-ust-events"
TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
source $TESTDIR/utils/utils.sh
source $TESTDIR/utils/utils.sh
BAIL_OUT "No UST events binary detected."
fi
BAIL_OUT "No UST events binary detected."
fi
-function wait_apps
-{
- while [ -n "$(pidof $TESTAPP_NAME)" ]; do
- sleep 0.5
- done
- pass "Wait for applications to end"
-}
-
function enable_lttng_channel_size_limit ()
{
sess_name="$1"
function enable_lttng_channel_size_limit ()
{
sess_name="$1"
start_lttng_tracing $session_name
start_lttng_tracing $session_name
- $TESTAPP_BIN $NR_ITER >/dev/null 2>&1 &
-
- wait_apps
+ $TESTAPP_BIN $NR_ITER >/dev/null 2>&1
stop_lttng_tracing $session_name
stop_lttng_tracing $session_name
start_lttng_tracing $SESSION_NAME
for i in `seq 1 5`; do
start_lttng_tracing $SESSION_NAME
for i in `seq 1 5`; do
- $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT & >/dev/null 2>&1
+ $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT >/dev/null 2>&1
ok $? "Start application $i for tracing"
done
ok $? "Start application $i for tracing"
done
stop_lttng_tracing $SESSION_NAME
destroy_lttng_session $SESSION_NAME
stop_lttng_tracing $SESSION_NAME
destroy_lttng_session $SESSION_NAME