From: Serge E. Hallyn <[email protected]>

That way we don't risk indirectly calling complete(&ctx->complete)
(through ckpt_err()) before ctx->complete has been initialized.

Signed-off-by: Serge E. Hallyn <[email protected]>
---
 checkpoint/restart.c |    2 --
 checkpoint/sys.c     |    4 ++++
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/checkpoint/restart.c b/checkpoint/restart.c
index b684d7a..6cdefc9 100644
--- a/checkpoint/restart.c
+++ b/checkpoint/restart.c
@@ -1092,8 +1092,6 @@ static int wait_all_tasks_finish(struct ckpt_ctx *ctx)
 {
        int ret;
 
-       init_completion(&ctx->complete);
-
        BUG_ON(ctx->active_pid != -1);
        ret = restore_activate_next(ctx);
        if (ret < 0)
diff --git a/checkpoint/sys.c b/checkpoint/sys.c
index d64f5a7..bf66418 100644
--- a/checkpoint/sys.c
+++ b/checkpoint/sys.c
@@ -245,6 +245,8 @@ static struct ckpt_ctx *ckpt_ctx_alloc(int fd, unsigned 
long uflags,
        INIT_LIST_HEAD(&ctx->pgarr_pool);
        init_waitqueue_head(&ctx->waitq);
        init_waitqueue_head(&ctx->ghostq);
+       if (kflags == CKPT_CTX_RESTART)
+               init_completion(&ctx->complete);
 
 #ifdef CONFIG_CHECKPOINT_DEBUG
        INIT_LIST_HEAD(&ctx->task_status);
@@ -473,6 +475,8 @@ static void _ckpt_msg_appendv(struct ckpt_ctx *ctx, int 
err, char *fmt,
 
        len += snprintf(&ctx->msg[len], CKPT_MSG_LEN-len, "[offset %lld]",
                        ctx->total);
+       if (len > CKPT_MSG_LEN)
+               goto full;
        len += vsnprintf(&ctx->msg[len], CKPT_MSG_LEN-len, fmt, ap);
        if (len > CKPT_MSG_LEN) {
 full:
-- 
1.6.1

_______________________________________________
Containers mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/containers

_______________________________________________
Devel mailing list
[email protected]
https://openvz.org/mailman/listinfo/devel

Reply via email to