[CRIU] [PATCH] zdtm: Fix fd01 cleanup
Andrei Vagin
avagin at virtuozzo.com
Thu Feb 1 20:55:58 MSK 2018
On Thu, Feb 01, 2018 at 05:48:22PM +0300, Kirill Tkhai wrote:
> On 31.01.2018 21:20, Andrei Vagin wrote:
> > On Tue, Jan 30, 2018 at 06:19:31PM +0300, Kirill Tkhai wrote:
> >> waitpid() does not return child pid, when child has not exited.
> >> So, we can't use it to find pids of children.
> >>
> >> Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
> >> ---
> >> test/zdtm/static/fd01.c | 17 ++++++++++++-----
> >> 1 file changed, 12 insertions(+), 5 deletions(-)
> >>
> >> diff --git a/test/zdtm/static/fd01.c b/test/zdtm/static/fd01.c
> >> index 7f0256a03..390d9d126 100644
> >> --- a/test/zdtm/static/fd01.c
> >> +++ b/test/zdtm/static/fd01.c
> >> @@ -22,11 +22,19 @@ int main(int argc, char **argv)
> >> unsigned int i, max_nr, flags;
> >> int fd, status, ret;
> >> struct rlimit rlim;
> >> + futex_t *futex;
> >> char buf[16];
> >> pid_t pid;
> >>
> >> test_init(argc, argv);
> >>
> >> + futex = mmap(NULL, sizeof(*futex), PROT_WRITE | PROT_READ, MAP_ANONYMOUS|MAP_SHARED, -1, 0);
> >> + if (futex == MAP_FAILED) {
> >> + fail("mmap");
> >> + exit(1);
> >> + }
> >> + futex_init(futex);
> >> +
> >> fd = open("/proc/sys/fs/nr_open", O_RDONLY);
> >> if (fd < 0) {
> >> fail("Can't open /proc/sys/fs/nr_open");
> >> @@ -86,7 +94,7 @@ int main(int argc, char **argv)
> >> fail("fork");
> >> exit(1);
> >> } else if (!pid) {
> >> - pause();
> >> + futex_wait_while(futex, 0);
> >> exit(0);
> >> }
> >> }
> >> @@ -95,10 +103,9 @@ int main(int argc, char **argv)
> >> test_waitsig();
> >>
> >> /* Cleanup */
> >> - while ((pid = waitpid(-1, &status, WNOHANG)) > 0) {
> >> - if (kill(pid, SIGTERM) == 0)
> >> - waitpid(-1, &status, 0); /* Ignore errors */
> >> - }
> >> + futex_set_and_wake(futex, 1);
> >> + while (wait(&status) > 0) /* Ignore errors */
> >> + ;
> >
> > Pls, check an exit code from children, otherwise it isn't a test,
> > because it nevel fails.
>
> Ok, no problem. But the idea was to use zdtm.py debug hooks, which checks
> for file descriptors in check_visible_state()...:
>
> print "%s: Old files lost: %s" % (pid, fold - fnew)
> print "%s: New files appeared: %s" % (pid, fnew - fold)
>
> >In addition, it would be good if you add
> >basic checks to be sure that file descriptors are restored correctly.
>
> Sadly, but it won't be possible to check that in sane way, because
> the behaviour of created children and files is almost "random".
> I don't see a good way to check everything in the test having so many
> entities. Maybe we better implement one more? And remain this test
> for checks I wrote above.
You are right, the zdtm hook does some basic checks, so I think it is
enough. Thank you.
>
> Kirill
More information about the CRIU
mailing list