[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