[LTP] [PATCH 1/2] lib: initialize lib|main_pid to zero in the setup_ipc
Petr Vorel
pvorel@suse.cz
Tue May 13 14:51:48 CEST 2025
Hi all,
...
> > +++ b/lib/tst_test.c
> > @@ -59,7 +59,6 @@ static const char *tid;
> > static int iterations = 1;
> > static float duration = -1;
> > static float timeout_mul = -1;
> > -static pid_t lib_pid;
> > static int mntpoint_mounted;
> > static int ovl_mounted;
> > static struct timespec tst_start_time; /* valid only for test pid */
> > @@ -143,7 +142,9 @@ static void setup_ipc(void)
> > tst_futexes = (char *)results + sizeof(struct results);
> > tst_max_futexes = (size - sizeof(struct results))/sizeof(futex_t);
> > }
> > - results->lib_pid = lib_pid;
> > +
> > + results->lib_pid = 0;
> > + results->main_pid = 0;
nit: Is it really needed to int them to 0? Because they should be 0 due the
default struct value, right?
> > }
> > static void cleanup_ipc(void)
> > @@ -394,7 +395,7 @@ void tst_vbrk_(const char *file, const int lineno, int ttype, const char *fmt,
> > * If tst_brk() is called from some of the C helpers even before the
> > * library was initialized, just exit.
> > */
> > - if (!results->lib_pid)
> > + if (!results || !results->lib_pid)
> > exit(TTYPE_RESULT(ttype));
> > update_results(TTYPE_RESULT(ttype));
> > @@ -1334,6 +1335,8 @@ static void do_setup(int argc, char *argv[])
> > tst_test->forks_child = 1;
> > }
> > + setup_ipc();
> > +
> > if (tst_test->needs_kconfigs && tst_kconfig_check(tst_test->needs_kconfigs))
> > tst_brk(TCONF, "Aborting due to unsuitable kernel config, see above!");
> > @@ -1393,8 +1396,6 @@ static void do_setup(int argc, char *argv[])
> > if (tst_test->hugepages.number)
> > tst_reserve_hugepages(&tst_test->hugepages);
> > - setup_ipc();
> > -
> I suppose that this has to go before the tst_reserve_hugepages() so that
> we have results->lib_pid defined and properly clean up after the
> hugepages.
Why? Is that due possible tst_brk() calls in tst_reserve_hugepages()?
(Which uses SAFE_* macros.) That would trigger Because there are tst_brk() calls before.
Also why not assign results->lib_pid = getpid() at the beginning of
tst_run_tcases() ?
Kind regards,
Petr
> However for that to work we have to set the
> results->lib_pid directly in the setup_ipc().
> > if (tst_test->bufs)
> > tst_buffers_alloc(tst_test->bufs);
> > @@ -1929,10 +1930,11 @@ void tst_run_tcases(int argc, char *argv[], struct tst_test *self)
> > unsigned int test_variants = 1;
> > struct utsname uval;
> > - lib_pid = getpid();
> > tst_test = self;
> > do_setup(argc, argv);
> > +
> > + results->lib_pid = getpid();
> Setting it here is too late.
> Other than that the patch looks good to me.
More information about the ltp
mailing list