Message ID | 1281081920-19538-1-git-send-email-kraxel@redhat.com |
---|---|
State | New |
Headers | show |
On 08/06/2010 10:05 AM, Gerd Hoffmann wrote: > Otherwise qemu might be killed due to SIGIO being received by a thread > which isn't prepared for that. Seen happening with pulseaudio backend. For 0.14 it may make sense to switch it qemu-threads, which would do that automatically. Acked-by: Paolo Bonzini <pbonzini@redhat.com> Paolo
On Fri, 6 Aug 2010, Gerd Hoffmann wrote: > Otherwise qemu might be killed due to SIGIO being received by a thread > which isn't prepared for that. Seen happening with pulseaudio backend. I've commited different patch. [..snip..]
diff --git a/audio/audio_pt_int.c b/audio/audio_pt_int.c index e889a98..0e5aa2c 100644 --- a/audio/audio_pt_int.c +++ b/audio/audio_pt_int.c @@ -1,5 +1,6 @@ #include "qemu-common.h" #include "audio.h" +#include <signal.h> #define AUDIO_CAP "audio-pt" @@ -23,6 +24,7 @@ int audio_pt_init (struct audio_pt *p, void *(*func) (void *), { int err, err2; const char *efunc; + sigset_t set, old; p->drv = drv; @@ -38,7 +40,14 @@ int audio_pt_init (struct audio_pt *p, void *(*func) (void *), goto err1; } + sigemptyset(&set); + sigaddset(&set, SIGUSR2); + sigaddset(&set, SIGIO); + sigaddset(&set, SIGALRM); + + pthread_sigmask(SIG_BLOCK, &set, &old); err = pthread_create (&p->thread, NULL, func, opaque); + pthread_sigmask(SIG_SETMASK, &old, NULL); if (err) { efunc = "pthread_create"; goto err2;
Otherwise qemu might be killed due to SIGIO being received by a thread which isn't prepared for that. Seen happening with pulseaudio backend. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- audio/audio_pt_int.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-)