From: S.Çağlar Onur Date: Sun, 25 May 2014 02:19:06 +0000 (-0400) Subject: destroy the original container after making sure the snapshot exists (fixes #224) X-Git-Tag: lxc-1.1.0.alpha1~81 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7e36f87e;p=thirdparty%2Flxc.git destroy the original container after making sure the snapshot exists (fixes #224) Signed-off-by: S.Çağlar Onur Acked-by: Serge E. Hallyn --- diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index fdac43366..8e611c7d3 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c @@ -3083,13 +3083,7 @@ static bool lxcapi_snapshot_restore(struct lxc_container *c, const char *snapnam if (!newname) newname = c->name; - if (strcmp(c->name, newname) == 0) { - if (!lxcapi_destroy(c)) { - ERROR("Could not destroy existing container %s", newname); - bdev_put(bdev); - return false; - } - } + ret = snprintf(clonelxcpath, MAXPATHLEN, "%ssnaps/%s", c->config_path, c->name); if (ret < 0 || ret >= MAXPATHLEN) { bdev_put(bdev); @@ -3105,6 +3099,15 @@ static bool lxcapi_snapshot_restore(struct lxc_container *c, const char *snapnam return false; } + if (strcmp(c->name, newname) == 0) { + if (!lxcapi_destroy(c)) { + ERROR("Could not destroy existing container %s", newname); + lxc_container_put(snap); + bdev_put(bdev); + return false; + } + } + if (strcmp(bdev->type, "dir") != 0 && strcmp(bdev->type, "loop") != 0) flags = LXC_CLONE_SNAPSHOT | LXC_CLONE_MAYBE_SNAPSHOT; rest = lxcapi_clone(snap, newname, c->config_path, flags,