[LTP] [PATCH] lib/tst_test.c: Fix tst_brk() handling
Jan Stancek
jstancek@redhat.com
Fri Apr 4 14:58:03 CEST 2025
On Fri, Apr 4, 2025 at 2:55 PM Petr Vorel <pvorel@suse.cz> wrote:
>
> > Hi!
> > > diff --git a/lib/tst_test.c b/lib/tst_test.c
> > > index c6395a5eb..6b1100b09 100644
> > > --- a/lib/tst_test.c
> > > +++ b/lib/tst_test.c
> > > @@ -407,7 +407,8 @@ void tst_vbrk_(const char *file, const int lineno, int ttype, const char *fmt,
> > > * current process.
> > > */
> > > if (TTYPE_RESULT(ttype) == TBROK) {
> > > - tst_atomic_inc(&results->abort_flag);
> > > + if (results)
> > > + tst_atomic_inc(&results->abort_flag);
>
> > > /*
> > > * If TBROK was called from one of the child processes we kill
>
>
> > And it's a bit more complex we also need to make sure to exit properly
> > when tst_brk() was called before the library was initialized, so we also
>
> +1
>
> > need:
>
> > diff --git a/lib/tst_test.c b/lib/tst_test.c
> > index 758e62823..d19908d94 100644
> > --- a/lib/tst_test.c
> > +++ b/lib/tst_test.c
> > @@ -386,6 +386,14 @@ void tst_vbrk_(const char *file, const int lineno, int ttype, const char *fmt,
> > va_list va)
> > {
> > print_result(file, lineno, ttype, fmt, va);
> > +
> > + /*
> > + * If tst_brk() is called from some of the C helpers even before the
> > + * library was initialized, just exit.
> > + */
> > + if (!lib_pid)
> > + exit(TTYPE_RESULT(ttype));
>
> Interesting, I never noticed lib_pid :). It's assigned in tst_run_tcases() -
> library gets initialized there. As that's the very first call in main(), this
> really applies for helpers in testcases/lib/ which define TST_NO_DEFAULT_MAIN.
>
> I suppose this is the part of the fix for core dumped helpers.
>
> > +
> > update_results(TTYPE_RESULT(ttype));
>
> > /*
> > @@ -415,7 +423,7 @@ void tst_vbrk_(const char *file, const int lineno, int ttype, const char *fmt,
> > * the main test process. That in turn triggers the code that
> > * kills leftover children once the main test process did exit.
> > */
> > - if (tst_getpid() != main_pid) {
> > + if (main_pid && tst_getpid() != main_pid) {
> > tst_res(TINFO, "Child process reported TBROK killing the test");
> > kill(main_pid, SIGKILL);
> > }
>
>
> > I will send v2 later on.
>
> +1
+1, I wanted to have a look too, and it will be easier to follow
having it all in together.
>
> Kind regards,
> Petr
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
>
More information about the ltp
mailing list