mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-06-04 11:00:56 +00:00
utils: fix lxc_set_death_signal()
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
This commit is contained in:
parent
54b38b25b1
commit
c7f493aee0
@ -1068,7 +1068,7 @@ static int do_start(void *data)
|
||||
* exit before we set the pdeath signal leading to a unsupervized
|
||||
* container.
|
||||
*/
|
||||
ret = lxc_set_death_signal(SIGKILL);
|
||||
ret = lxc_set_death_signal(SIGKILL, 0);
|
||||
if (ret < 0) {
|
||||
SYSERROR("Failed to set PR_SET_PDEATHSIG to SIGKILL");
|
||||
goto out_warn_father;
|
||||
@ -1146,7 +1146,7 @@ static int do_start(void *data)
|
||||
goto out_warn_father;
|
||||
|
||||
/* set{g,u}id() clears deathsignal */
|
||||
ret = lxc_set_death_signal(SIGKILL);
|
||||
ret = lxc_set_death_signal(SIGKILL, 0);
|
||||
if (ret < 0) {
|
||||
SYSERROR("Failed to set PR_SET_PDEATHSIG to SIGKILL");
|
||||
goto out_warn_father;
|
||||
@ -1388,7 +1388,7 @@ static int do_start(void *data)
|
||||
}
|
||||
|
||||
if (handler->conf->monitor_signal_pdeath != SIGKILL) {
|
||||
ret = lxc_set_death_signal(handler->conf->monitor_signal_pdeath);
|
||||
ret = lxc_set_death_signal(handler->conf->monitor_signal_pdeath, 0);
|
||||
if (ret < 0) {
|
||||
SYSERROR("Failed to set PR_SET_PDEATHSIG to %d",
|
||||
handler->conf->monitor_signal_pdeath);
|
||||
|
@ -1652,7 +1652,7 @@ uint64_t lxc_find_next_power2(uint64_t n)
|
||||
return n;
|
||||
}
|
||||
|
||||
int lxc_set_death_signal(int signal)
|
||||
int lxc_set_death_signal(int signal, pid_t parent)
|
||||
{
|
||||
int ret;
|
||||
pid_t ppid;
|
||||
@ -1662,11 +1662,8 @@ int lxc_set_death_signal(int signal)
|
||||
|
||||
/* Check whether we have been orphaned. */
|
||||
ppid = (pid_t)syscall(SYS_getppid);
|
||||
if (ppid == 1) {
|
||||
pid_t self;
|
||||
|
||||
self = lxc_raw_getpid();
|
||||
ret = kill(self, SIGKILL);
|
||||
if (ppid != parent) {
|
||||
ret = raise(SIGKILL);
|
||||
if (ret < 0)
|
||||
return -1;
|
||||
}
|
||||
|
@ -434,7 +434,7 @@ static inline pid_t lxc_raw_gettid(void)
|
||||
}
|
||||
|
||||
/* Set a signal the child process will receive after the parent has died. */
|
||||
extern int lxc_set_death_signal(int signal);
|
||||
extern int lxc_set_death_signal(int signal, pid_t parent);
|
||||
extern int fd_cloexec(int fd, bool cloexec);
|
||||
extern int recursive_destroy(char *dirname);
|
||||
extern int lxc_setup_keyring(void);
|
||||
|
Loading…
Reference in New Issue
Block a user