[CRIU] [PATCH 2/4] service: page-server: return port back to user
Ruslan Kuprieiev
kupruser at gmail.com
Wed Sep 17 00:25:18 PDT 2014
Signed-off-by: Ruslan Kuprieiev <kupruser at gmail.com>
---
cr-service.c | 44 ++++++++++++++++++++++++++++----------------
1 file changed, 28 insertions(+), 16 deletions(-)
diff --git a/cr-service.c b/cr-service.c
index d144f47..2af6e8f 100644
--- a/cr-service.c
+++ b/cr-service.c
@@ -505,7 +505,7 @@ static int pre_dump_loop(int sk, CriuReq *msg)
static int start_page_server_req(int sk, CriuOpts *req)
{
- int ret, pid, start_pipe[2];
+ int ret = -1, pid, start_pipe[2];
ssize_t count;
bool success = false;
CriuResp resp = CRIU_RESP__INIT;
@@ -532,28 +532,40 @@ static int start_page_server_req(int sk, CriuOpts *req)
pr_debug("Starting page server\n");
- ret = cr_page_server(true, start_pipe[1]);
+ pid = cr_page_server(true, start_pipe[1]);
+ if (pid <= 0)
+ goto out_ch;
+
+ count = write(start_pipe[1], &opts.ps_port, sizeof(opts.ps_port));
+ if (count != sizeof(opts.ps_port))
+ goto out_ch;
+
+ ret = pid;
out_ch:
- count = write(start_pipe[1], &ret, sizeof(ret));
+ if (ret < 0 && pid > 0)
+ kill(pid, SIGKILL);
close(start_pipe[1]);
- if (count != sizeof(ret))
- exit(1);
- exit(0);
+ exit(ret);
}
close(start_pipe[1]);
- wait(NULL);
- ret = -1;
- count = read(start_pipe[0], &ret, sizeof(ret));
- if (count != sizeof(ret))
- success = false;
- else if (ret > 0) {
- success = true;
- ps.has_pid = true;
- ps.pid = ret;
- resp.ps = &ps;
+ wait(&ret);
+ if (ret <= 0)
+ goto out;
+
+ count = read(start_pipe[0], &opts.ps_port, sizeof(opts.ps_port));
+ if (count != sizeof(opts.ps_port)) {
+ kill(ret, SIGKILL);
+ goto out;
}
+ success = true;
+ ps.has_pid = true;
+ ps.pid = ret;
+ ps.has_port = true;
+ ps.port = opts.ps_port;
+ resp.ps = &ps;
+
pr_debug("Page server started\n");
out:
resp.type = CRIU_REQ_TYPE__PAGE_SERVER;
--
1.9.3
More information about the CRIU
mailing list