From: Serge Hallyn Date: Fri, 21 Jun 2013 19:16:42 +0000 (-0500) Subject: api_clone: don't remove storage if we haven't created it X-Git-Tag: lxc-1.0.0.alpha1~1^2~149 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=176d9acb2ec17211a0d69bd2bd99f914fad8d7ad;p=thirdparty%2Flxc.git api_clone: don't remove storage if we haven't created it In the best case we'll get errors about failing to remove it. In the worst case we'll be trying to delete the original container's rootfs. Reported-by: zoolook Signed-off-by: Serge Hallyn --- diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index b6d5b2ff5..677fa561e 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c @@ -1866,7 +1866,7 @@ struct lxc_container *lxcapi_clone(struct lxc_container *c, const char *newname, { struct lxc_container *c2 = NULL; char newpath[MAXPATHLEN]; - int ret; + int ret, storage_copied = 0; const char *n, *l; FILE *fout; @@ -1948,6 +1948,10 @@ struct lxc_container *lxcapi_clone(struct lxc_container *c, const char *newname, if (ret < 0) goto out; + // We've now successfully created c2's storage, so clear it out if we + // fail after this + storage_copied = 1; + if (!c2->save_config(c2, NULL)) goto out; @@ -1961,6 +1965,8 @@ struct lxc_container *lxcapi_clone(struct lxc_container *c, const char *newname, out: container_mem_unlock(c); if (c2) { + if (!storage_copied) + c2->lxc_conf->rootfs.path = NULL; c2->destroy(c2); lxc_container_put(c2); }