[CRIU] [PATCH 1/2] zdtm: Write .inprogress pidfile

Andrei Vagin avagin at virtuozzo.com
Wed Oct 26 13:37:10 PDT 2016


On Wed, Oct 26, 2016 at 10:36:19PM +0300, Pavel Emelyanov wrote:
> On 10/26/2016 09:16 PM, Andrei Vagin wrote:
> > On Wed, Oct 26, 2016 at 11:51:29AM +0300, Pavel Emelyanov wrote:
> >> This one will contain pid of the task living in a sub-ns and
> >> waiting for the rest of the test to get daemonized.
> >>
> >> Signed-off-by: Pavel Emelyanov <xemul at virtuozzo.com>
> >> ---
> >>  test/zdtm/lib/ns.c      | 12 ++++++++++++
> >>  test/zdtm/lib/test.c    |  1 -
> >>  test/zdtm/lib/zdtmtst.h |  2 ++
> >>  3 files changed, 14 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/test/zdtm/lib/ns.c b/test/zdtm/lib/ns.c
> >> index acf4a31..fa6ee86 100644
> >> --- a/test/zdtm/lib/ns.c
> >> +++ b/test/zdtm/lib/ns.c
> >> @@ -362,6 +362,7 @@ void ns_create(int argc, char **argv)
> >>  	int ret, status;
> >>  	struct ns_exec_args args;
> >>  	int flags;
> >> +	char *pidf;
> >>  
> >>  	args.argc = argc;
> >>  	args.argv = argv;
> >> @@ -416,6 +417,14 @@ void ns_create(int argc, char **argv)
> >>  	}
> >>  	shutdown(args.status_pipe[0], SHUT_WR);
> >>  
> >> +	pidf = pidfile;
> >> +	pidfile = malloc(strlen(pidfile) + 13);
> >> +	sprintf(pidfile, "%s%s", pidf, INPROGRESS);
> > 
> > Why do we need another pid file? Why is it bad to write pidfile (without
> > INPROGRESS)?
> 
> Because it contains PID of a process that will die really soon.

Why can we not write a final pid in this file?

> Also, some scripts (may) wait for the .pid file to appear, meaning
> that the test has started.

It's a problem of these script. A test is started when the initial
proces exited.

> 
> >> +	if (write_pidfile(pid)) {
> >> +		fprintf(stderr, "Preparations fail\n");
> >> +		exit(1);
> >> +	}
> >> +
> >>  	status = 1;
> >>  	ret = read(args.status_pipe[0], &status, sizeof(status));
> >>  	if (ret != sizeof(status) || status) {
> >> @@ -428,6 +437,9 @@ void ns_create(int argc, char **argv)
> >>  		exit(1);
> >>  	}
> >>  
> >> +	unlink(pidfile);
> >> +	pidfile = pidf;
> >> +
> >>  	if (write_pidfile(pid))
> >>  		exit(1);
> >>  
> >> diff --git a/test/zdtm/lib/test.c b/test/zdtm/lib/test.c
> >> index db7118d..a3576a5 100644
> >> --- a/test/zdtm/lib/test.c
> >> +++ b/test/zdtm/lib/test.c
> >> @@ -41,7 +41,6 @@ int test_fork_id(int id)
> >>  
> >>  static int cwd = -1;
> >>  
> >> -#define INPROGRESS ".inprogress"
> >>  static void test_fini(void)
> >>  {
> >>  	char path[PATH_MAX];
> >> diff --git a/test/zdtm/lib/zdtmtst.h b/test/zdtm/lib/zdtmtst.h
> >> index 8a6f6ba..3f9f550 100644
> >> --- a/test/zdtm/lib/zdtmtst.h
> >> +++ b/test/zdtm/lib/zdtmtst.h
> >> @@ -4,6 +4,8 @@
> >>  #include <sys/types.h>
> >>  #include <unistd.h>
> >>  
> >> +#define INPROGRESS ".inprogress"
> >> +
> >>  #ifndef PAGE_SIZE
> >>  # define PAGE_SIZE (unsigned int)(sysconf(_SC_PAGESIZE))
> >>  #endif
> >> -- 
> >> 2.5.0
> >>
> >> _______________________________________________
> >> CRIU mailing list
> >> CRIU at openvz.org
> >> https://lists.openvz.org/mailman/listinfo/criu
> > .
> > 
> 


More information about the CRIU mailing list