On 2011-06-09 00:55, Alexander Graf wrote: > Qemu uses signalfd to figure out, if a signal occured without the need > to actually receive the signal. Instead, it can read from the fd to receive > its news. > > Now, we obviously don't always have signalfd around. Especially not on > non-Linux systems. So what we do there is that we create a new thread, > block that thread on all signals and simply call sigwait to wait for a > signal we're interested in to occur. > > This all sounds great, but what we're really doing is: > > sigset_t all; > > sigfillset(&all); > sigprocmask(SIG_BLOCK, &all, NULL); > > which - on Darwin - blocks all signals on the current _process_, not only > on the current thread. To block signals on the thread, we can use > pthread_sigmask(). > > This patch does that, assuming that my above analysis is correct, and thus > renders Qemu useable on Darwin again. > > Reported-by: Andreas Färber <andreas.faer...@web.de> > CC: Paolo Bonzini <pbonz...@redhat.com> > CC: Jan Kiszka <jan.kis...@siemens.com> > CC: Anthony Liguori <anth...@codemonkey.ws> > Signed-off-by: Alexander Graf <ag...@suse.de> > --- > compatfd.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/compatfd.c b/compatfd.c > index bd377c4..41586ce 100644 > --- a/compatfd.c > +++ b/compatfd.c > @@ -29,7 +29,7 @@ static void *sigwait_compat(void *opaque) > sigset_t all; > > sigfillset(&all); > - sigprocmask(SIG_BLOCK, &all, NULL); > + pthread_sigmask(SIG_BLOCK, &all, NULL); > > while (1) { > int sig;
Makes a lot of sense. And it also effects pre-signalfd Linux (<2.6.27). Acked-by: Jan Kiszka <jan.kis...@siemens.com>
signature.asc
Description: OpenPGP digital signature