[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] Block I/O signals in audio helper threads.
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH] Block I/O signals in audio helper threads. |
Date: |
Fri, 6 Aug 2010 10:05:20 +0200 |
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 <address@hidden>
---
audio/audio_pt_int.c | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
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;
--
1.7.1
- [Qemu-devel] [PATCH] Block I/O signals in audio helper threads.,
Gerd Hoffmann <=