Skip to content
  • Alexander Graf's avatar
    sigfd: use pthread_sigmask · 09716e45
    Alexander Graf authored
    
    
    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: default avatarAndreas Färber <andreas.faerber@web.de>
    Acked-by: default avatarPaolo Bonizni <pbonzini@redhat.com>
    CC: Jan Kiszka <jan.kiszka@siemens.com>
    CC: Anthony Liguori <anthony@codemonkey.ws>
    Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
    Signed-off-by: default avatarEdgar E. Iglesias <edgar.iglesias@gmail.com>
    09716e45