[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] sigfd: use pthread_sigmask
From: |
Edgar E. Iglesias |
Subject: |
Re: [Qemu-devel] [PATCH] sigfd: use pthread_sigmask |
Date: |
Fri, 10 Jun 2011 23:22:32 +0200 |
User-agent: |
Mutt/1.5.20 (2009-06-14) |
On Thu, Jun 09, 2011 at 12:55:37AM +0200, 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.
Applied, thanks all.
Cheers
>
> Reported-by: Andreas Färber <address@hidden>
> CC: Paolo Bonzini <address@hidden>
> CC: Jan Kiszka <address@hidden>
> CC: Anthony Liguori <address@hidden>
> Signed-off-by: Alexander Graf <address@hidden>
> ---
> 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;
> --
> 1.7.1