Hi Julian,

Neither mine "sleep 0.1" or your version with "while [! -f ............" are race condition free.
I suggest that we add an option to gen-ust-events to wait before the first event is generated.
gen_kernel_test_events already have this functionality to wait before the first event.

Something like this
static struct option long_options[] =
{
/* These options set a flag. */
{"iter", required_argument, 0, 'i'},
{"wait", required_argument, 0, 'w'},
{"sync-after-first-event", required_argument, 0, 'a'},
{"sync-before-last-event", required_argument, 0, 'b'},
{"sync-before-last-event-touch", required_argument, 0, 'c'},
{"sync-before-exit", required_argument, 0, 'd'},
{"sync-before-exit-touch", required_argument, 0, 'e'},
+ {"sync-before-first-event", required_argument, 0, 'f'},
 
{0, 0, 0, 0}
};
....

I will create one or more patches for this tomorrow
 
Anders Wallin


On Wed, Mar 31, 2021 at 9:25 PM Jonathan Rajotte-Julien <jonathan.rajotte-julien@efficios.com> wrote:
> #
> # SPDX-License-Identifier: GPL-2.0-only
>
> -TEST_DESC="LTTng - Event traker test"
> +TEST_DESC="LTTng - Event tracker test"
>
> CURDIR=$(dirname "$0")/
> TESTDIR="$CURDIR/../../.."
> @@ -42,6 +42,8 @@ function prepare_ust_app
>
>       $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT -a "$AFTER_FIRST_PATH" -b
>       "$BEFORE_LAST_PATH" &
>       CHILD_PID=$!
> +     # voluntary context switch to start $TESTAPP_BIN
> +     sleep 0.1

A wait on the $AFTER_FIRST_PATH file would be probably more deterministic than a sleep here.

  while [ ! -f "${AFTER_FIRST_PATH}" ]; do
          sleep 0.1
  done

I would also expect something similar for the `prepare_kernel_app` function considering the same race is most probably present and simply not triggered by a chance of luck.
Seems like gen-kernel-test-events does not expose the same sync capabilities here, please use gen-ust-events as an example of how it is done.

Let us know how your testing goes.

Thanks