[CRIU] [PATCH] service: don't send dump response in case of self-dump without leave_running

Ruslan Kuprieiev kupruser at gmail.com
Thu Nov 28 14:59:22 PST 2013


On 26.11.2013 03:32, Ruslan Kuprieiev wrote:
> Currently we have a bug: if no leave_running is set in request, service won't send dump response. We must not send response only if it was a self-dump request and no leave_running option was set.
>
> Signed-off-by: Ruslan Kuprieiev <kupruser at gmail.com>
> ---
>   cr-service.c | 16 ++++++++++------
>   1 file changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/cr-service.c b/cr-service.c
> index eba5342..322f079 100644
> --- a/cr-service.c
> +++ b/cr-service.c
> @@ -91,6 +91,8 @@ int send_criu_restore_resp(int socket_fd, bool success, int pid)
>   	return send_criu_msg(socket_fd, &msg);
>   }
>   
> +static bool self_dump;
> +
>   static int setup_opts_from_req(int sk, CriuOpts *req)
>   {
>   	struct ucred ids;
> @@ -141,6 +143,7 @@ static int setup_opts_from_req(int sk, CriuOpts *req)
>   		opts.final_state = TASK_ALIVE;
>   
>   	if (!req->has_pid) {
> +		self_dump = true;
>   		req->has_pid = true;
>   		req->pid = ids.pid;
>   	}
> @@ -175,13 +178,14 @@ static int dump_using_req(int sk, CriuOpts *req)
>   	if (cr_dump_tasks(req->pid) == -1)
>   		goto exit;
>   
> -	if (req->has_leave_running && req->leave_running) {
> -		success = true;
> +	success = true;
>   exit:
> -		if (send_criu_dump_resp(sk, success, false) == -1) {
> -			pr_perror("Can't send response");
> -			success = false;
> -		}
> +	if (self_dump && !(req->has_leave_running && req->leave_running))
> +		return success ? 0 : 1;
> +
> +	if (send_criu_dump_resp(sk, success, false) == -1) {
> +		pr_perror("Can't send response");
> +		success = false;
>   	}
>   
>   	return success ? 0 : 1;
Pavel, please consider applying this patch.


More information about the CRIU mailing list