]> git.proxmox.com Git - mirror_lxc.git/commitdiff
destroy the original container after making sure the snapshot exists (fixes #224)
authorS.Çağlar Onur <caglar@10ur.org>
Sun, 25 May 2014 02:19:06 +0000 (22:19 -0400)
committerStéphane Graber <stgraber@ubuntu.com>
Sun, 25 May 2014 14:39:20 +0000 (10:39 -0400)
Signed-off-by: S.Çağlar Onur <caglar@10ur.org>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
src/lxc/lxccontainer.c

index fdac43366de795ee6f946d731f2499a7e6c7b17d..8e611c7d38a56ee1c24c6804c5d6d051385c6a5c 100644 (file)
@@ -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,