um: Cleanup SIGTERM handling
Richard reported that some UML processes survive if the UML main process receives a SIGTERM. This issue was caused by a wrongly placed signal(SIGTERM, SIG_DFL) in init_new_thread_signals(). It disabled the UML exit handler accidently for some processes. The correct solution is to disable the fatal handler for all UML helper threads/processes. Such that last_ditch_exit() does not get called multiple times and all processes can exit due to SIGTERM. Reported-and-tested-by: Richard W.M. Jones <rjones@redhat.com> Signed-off-by: Richard Weinberger <richard@nod.at>
Este commit está contenido en:
@@ -7,7 +7,6 @@
|
||||
#ifndef __UM_UBD_USER_H
|
||||
#define __UM_UBD_USER_H
|
||||
|
||||
extern void ignore_sigwinch_sig(void);
|
||||
extern int start_io_thread(unsigned long sp, int *fds_out);
|
||||
extern int io_thread(void *arg);
|
||||
extern int kernel_fd;
|
||||
|
@@ -1476,7 +1476,8 @@ int io_thread(void *arg)
|
||||
struct io_thread_req *req;
|
||||
int n;
|
||||
|
||||
ignore_sigwinch_sig();
|
||||
os_fix_helper_signals();
|
||||
|
||||
while(1){
|
||||
n = os_read_file(kernel_fd, &req,
|
||||
sizeof(struct io_thread_req *));
|
||||
|
@@ -21,11 +21,6 @@
|
||||
#include "ubd.h"
|
||||
#include <os.h>
|
||||
|
||||
void ignore_sigwinch_sig(void)
|
||||
{
|
||||
signal(SIGWINCH, SIG_IGN);
|
||||
}
|
||||
|
||||
int start_io_thread(unsigned long sp, int *fd_out)
|
||||
{
|
||||
int pid, fds[2], err;
|
||||
|
Referencia en una nueva incidencia
Block a user