コード例 #1
0
ファイル: ipc_ns.c プロジェクト: kawamuray/criu
static int prepare_ipc_var(int pid)
{
	int fd, ret;
	IpcVarEntry *var;

	pr_info("Restoring IPC variables\n");
	fd = open_image(CR_FD_IPC_VAR, O_RSTR, pid);
	if (fd < 0)
		return -1;

	ret = pb_read_one(fd, &var, PB_IPC_VAR);
	close_safe(&fd);
	if (ret <= 0) {
		pr_err("Failed to read IPC namespace variables\n");
		return -EFAULT;
	}

	ipc_sysctl_req(var, CTL_PRINT);

	ret = ipc_sysctl_req(var, CTL_WRITE);
	ipc_var_entry__free_unpacked(var, NULL);

	if (ret < 0) {
		pr_err("Failed to prepare IPC namespace variables\n");
		return -EFAULT;
	}

	return 0;
}
コード例 #2
0
ファイル: ipc_ns.c プロジェクト: 8472/criu
static int dump_ipc_var(struct cr_img *img)
{
	IpcVarEntry var = IPC_VAR_ENTRY__INIT;
	int ret = -1;

	var.n_sem_ctls	= 4;
	var.sem_ctls	= xmalloc(pb_repeated_size(&var, sem_ctls));
	if (!var.sem_ctls)
		goto err;

	ret = ipc_sysctl_req(&var, CTL_READ);
	if (ret < 0) {
		pr_err("Failed to read IPC variables\n");
		goto err;
	}

	ret = pb_write_one(img, &var, PB_IPC_VAR);
	if (ret < 0) {
		pr_err("Failed to write IPC variables\n");
		goto err;
	}

err:
	xfree(var.sem_ctls);
	return ret;
}