mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-08-08 20:00:08 +00:00
Revert "start: Detect early failure of the new child"
This reverts commit 5a5c35c3a0
.
This commit was preventing startup of containers using lxc hooks and
shutdown of all other containers, requiring the use of a good old
kill -9 to get rid of lxc-start after a container shutdown.
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
This commit is contained in:
parent
3763ee8591
commit
23154d5764
@ -198,7 +198,6 @@ static int setup_signal_fd(sigset_t *oldmask)
|
|||||||
sigdelset(&mask, SIGILL) ||
|
sigdelset(&mask, SIGILL) ||
|
||||||
sigdelset(&mask, SIGSEGV) ||
|
sigdelset(&mask, SIGSEGV) ||
|
||||||
sigdelset(&mask, SIGBUS) ||
|
sigdelset(&mask, SIGBUS) ||
|
||||||
sigdelset(&mask, SIGCHLD) ||
|
|
||||||
sigprocmask(SIG_BLOCK, &mask, oldmask)) {
|
sigprocmask(SIG_BLOCK, &mask, oldmask)) {
|
||||||
SYSERROR("failed to set signal mask");
|
SYSERROR("failed to set signal mask");
|
||||||
return -1;
|
return -1;
|
||||||
@ -740,29 +739,10 @@ int save_phys_nics(struct lxc_conf *conf)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sigchild_handler(int sig)
|
|
||||||
{
|
|
||||||
int status;
|
|
||||||
pid_t child;
|
|
||||||
|
|
||||||
child = wait(&status);
|
|
||||||
if (child < 0) {
|
|
||||||
SYSERROR("SIGCHLD caught but wait() failed: %m\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (WIFSIGNALED(status))
|
|
||||||
ERROR("Process in the new namespace died before execve()"
|
|
||||||
" due to signal: %i", WTERMSIG(status));
|
|
||||||
else if (WIFEXITED(status))
|
|
||||||
ERROR("Process in the new namespace died before execve()"
|
|
||||||
" with exit code: %i", WIFEXITED(status));
|
|
||||||
}
|
|
||||||
|
|
||||||
int lxc_spawn(struct lxc_handler *handler)
|
int lxc_spawn(struct lxc_handler *handler)
|
||||||
{
|
{
|
||||||
int failed_before_rename = 0;
|
int failed_before_rename = 0;
|
||||||
struct sigaction act;
|
|
||||||
const char *name = handler->name;
|
const char *name = handler->name;
|
||||||
|
|
||||||
if (lxc_sync_init(handler))
|
if (lxc_sync_init(handler))
|
||||||
@ -813,14 +793,6 @@ int lxc_spawn(struct lxc_handler *handler)
|
|||||||
goto out_delete_net;
|
goto out_delete_net;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Install a SIGCHLD handler to detect the death of the new child between
|
|
||||||
* clone() and execve().
|
|
||||||
*/
|
|
||||||
memset(&act, 0, sizeof(act));
|
|
||||||
act.sa_handler = sigchild_handler;
|
|
||||||
sigaction(SIGCHLD, &act, NULL);
|
|
||||||
|
|
||||||
/* Create a process in a new set of namespaces */
|
/* Create a process in a new set of namespaces */
|
||||||
handler->pid = lxc_clone(do_start, handler, handler->clone_flags);
|
handler->pid = lxc_clone(do_start, handler, handler->clone_flags);
|
||||||
if (handler->pid < 0) {
|
if (handler->pid < 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user