mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-08-02 18:56:26 +00:00
Add lxc_conf_free()
Then after lxcapi container->create(), free whatever lxc_conf may be loaded and reload from the newly created configuration file. Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
This commit is contained in:
parent
64fca455ae
commit
8eb5694baf
@ -2556,3 +2556,21 @@ int lxc_clear_hooks(struct lxc_conf *c)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void lxc_conf_free(struct lxc_conf *conf)
|
||||
{
|
||||
if (!conf)
|
||||
return;
|
||||
if (conf->console.path)
|
||||
free(conf->console.path);
|
||||
if (conf->rootfs.mount != LXCROOTFSMOUNT)
|
||||
free(conf->rootfs.mount);
|
||||
lxc_clear_config_network(conf);
|
||||
if (conf->aa_profile)
|
||||
free(conf->aa_profile);
|
||||
lxc_clear_config_caps(conf);
|
||||
lxc_clear_cgroups(conf, "lxc.cgroup");
|
||||
lxc_clear_hooks(conf);
|
||||
lxc_clear_mount_entries(conf);
|
||||
free(conf);
|
||||
}
|
||||
|
@ -245,6 +245,7 @@ int run_lxc_hooks(const char *name, char *hook, struct lxc_conf *conf);
|
||||
* Initialize the lxc configuration structure
|
||||
*/
|
||||
extern struct lxc_conf *lxc_conf_init(void);
|
||||
extern void lxc_conf_free(struct lxc_conf *conf);
|
||||
|
||||
extern int pin_rootfs(const char *rootfs);
|
||||
|
||||
|
@ -215,6 +215,15 @@ static pid_t lxcapi_init_pid(struct lxc_container *c)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static bool load_config_locked(struct lxc_container *c, char *fname)
|
||||
{
|
||||
if (!c->lxc_conf)
|
||||
c->lxc_conf = lxc_conf_init();
|
||||
if (c->lxc_conf && !lxc_config_read(fname, c->lxc_conf))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool lxcapi_load_config(struct lxc_container *c, char *alt_file)
|
||||
{
|
||||
bool ret = false;
|
||||
@ -229,10 +238,7 @@ static bool lxcapi_load_config(struct lxc_container *c, char *alt_file)
|
||||
return false;
|
||||
if (lxclock(c->slock, 0))
|
||||
return false;
|
||||
if (!c->lxc_conf)
|
||||
c->lxc_conf = lxc_conf_init();
|
||||
if (c->lxc_conf && !lxc_config_read(fname, c->lxc_conf))
|
||||
ret = true;
|
||||
ret = load_config_locked(c, fname);
|
||||
lxcunlock(c->slock);
|
||||
return ret;
|
||||
}
|
||||
@ -596,11 +602,18 @@ again:
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
if (WEXITSTATUS(status) != 0)
|
||||
if (WEXITSTATUS(status) != 0) {
|
||||
ERROR("container creation template for %s exited with %d\n",
|
||||
c->name, WEXITSTATUS(status));
|
||||
else
|
||||
bret = true;
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
// now clear out the lxc_conf we have, reload from the created
|
||||
// container
|
||||
if (c->lxc_conf)
|
||||
lxc_conf_free(c->lxc_conf);
|
||||
c->lxc_conf = NULL;
|
||||
bret = load_config_locked(c, c->configfile);
|
||||
|
||||
out_unlock:
|
||||
lxcunlock(c->slock);
|
||||
|
Loading…
Reference in New Issue
Block a user