[CRIU] test/others/rpc test cases

Dmitry Safonov 0x7f454c46 at gmail.com
Wed May 16 19:16:12 MSK 2018


2018-05-16 16:52 GMT+01:00 Adrian Reber <adrian at lisas.de>:
> Hello Andrei,
>
> we quickly chatted about the tests in test/others/rpc and I had a look
> at it.
>
> One test (errno.py) dumps itself, keeps on running and tries to restore
> itself. This should (and does fail) as the PID is already in use by the
> test case. The test case wants to to test the error handling of 'criu
> service'. But CRIU just kills all processes which it failed to restore
> in criu/cr-restore.c (around line 2240 : kill(vpid(pi), SIGKILL);).
>
> As the test case is killed by CRIU it counts as a failure. I guess this
> used to work at some point in time, but with 3.8.1 it does not.
>
> I am not sure what the right solution is. Should CRIU kill a process if
> restore fails, probably to make sure that no half restored process still
> exists. Maybe the test case does not make sense anymore...
>
> Do you have any thoughts on this? Is this a CRIU bug or a wrong test case?

It looks to me like a valid test. CRIU shouldn't kill existing tasks with
reused PID. Do we run this errno.py on Travis?

I haven't even compile tested, but something like this might fix?

--->8---
--- a/criu/cr-restore.c
+++ b/criu/cr-restore.c
@@ -1510,6 +1510,7 @@ static int do_fork_with_pid(struct pstree_item
*item, struct ns_id *pid_ns, stru
        if (pid < 0) {
                pr_perror("Can't clone()");
                ret = -1;
+               hlp_pid->ns[i].virt = -1;
                goto unblock;
        }


-- 
             Dmitry


More information about the CRIU mailing list