On Mon, Mar 14, 2011 at 01:07:40PM +0000, Daniel P. Berrange wrote:
> On Mon, Mar 14, 2011 at 02:58:55PM +0200, Gleb Natapov wrote:
> > Currently when rogue script kills QEMU process (using TERM/INT/HUP
> > signal) it looks indistinguishable from system shutdown. Lets report
> > that QMEU was killed and leave some clues about the killed identity.
> 
> Good idea, but....
> 
> > 
> > Signed-off-by: Gleb Natapov <g...@redhat.com>
> > diff --git a/os-posix.c b/os-posix.c
> > index 38c29d1..7e175e8 100644
> > --- a/os-posix.c
> > +++ b/os-posix.c
> > @@ -61,8 +61,9 @@ void os_setup_early_signal_handling(void)
> >      sigaction(SIGPIPE, &act, NULL);
> >  }
> >  
> > -static void termsig_handler(int signal)
> > +static void termsig_handler(int signal, siginfo_t *info, void *c)
> >  {
> > +    fprintf(stderr, "Got signal %d from pid %d\n", info->si_signo, 
> > info->si_pid);
> >      qemu_system_shutdown_request();
> 
> ...fprintf() isn't async signal safe. It could deadlock the process
> if it malloc()s while doing the arg formatting & the interrupted
> thread was already holding a malloc() lock, or indeed if the stdio
> impl itself has internal locks which are held. So this data needs
> to be manually output using just write()
> 
Or we can save info->si_signo && info->si_pid in global variables and
print this when shutdown is performed by main loop. Will send updated
patch.
 
--
                        Gleb.

Reply via email to