* while container is running...
*/
if (daemonize) {
+ bool started;
char title[2048];
pid_t pid;
*/
c->pidfile = NULL;
- /* Prevent leaking the command socket to the second
- * fork().
- */
- close(handler->conf->maincmd_fd);
- return wait_on_daemonized_start(handler, pid);
+ started = wait_on_daemonized_start(handler, pid);
+
+ free_init_cmd(init_cmd);
+ lxc_free_handler(handler);
+ return started;
}
/* We don't really care if this doesn't print all the
SYSERROR("Error doing dual-fork");
exit(1);
}
- if (pid != 0)
+
+ if (pid != 0) {
+ free_init_cmd(init_cmd);
+ lxc_free_handler(handler);
exit(0);
+ }
+
/* like daemon(), chdir to / and redirect 0,1,2 to /dev/null */
if (chdir("/")) {
SYSERROR("Error chdir()ing to /.");
} else {
if (!am_single_threaded()) {
ERROR("Cannot start non-daemonized container when threaded");
+ free_init_cmd(init_cmd);
lxc_free_handler(handler);
return false;
}
if (conf->monitor_unshare) {
if (unshare(CLONE_NEWNS)) {
SYSERROR("failed to unshare mount namespace");
- free_init_cmd(init_cmd);
lxc_free_handler(handler);
- return false;
+ ret = 1;
+ goto out;
}
if (mount(NULL, "/", NULL, MS_SLAVE|MS_REC, NULL)) {
SYSERROR("Failed to make / rslave at startup");
- free_init_cmd(init_cmd);
lxc_free_handler(handler);
- return false;
+ ret = 1;
+ goto out;
}
}
if (conf->reboot == 2) {
/* initialize handler */
handler = lxc_init_handler(c->name, conf, c->config_path, daemonize);
- if (!handler)
+ if (!handler) {
+ ret = 1;
goto out;
+ }
}
if (lxc_check_inherited(conf, daemonize,