diff options
author | ths <ths@c046a42c-6fe2-441c-8c8c-71466251a162> | 2007-07-11 23:23:15 +0000 |
---|---|---|
committer | ths <ths@c046a42c-6fe2-441c-8c8c-71466251a162> | 2007-07-11 23:23:15 +0000 |
commit | e784ba70e016eed3203e403256f87b34dd6ef48b (patch) | |
tree | acb8b64af36c8467796568b5e70b9dac672c4880 /audio/sdlaudio.c | |
parent | af3a9031061251fbbee2c1f06b876c3732cfee71 (diff) |
Ensure signals are properly masked for new SDL Audio threads, by Andrzej
Zaborowski.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3069 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'audio/sdlaudio.c')
-rw-r--r-- | audio/sdlaudio.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/audio/sdlaudio.c b/audio/sdlaudio.c index f2a6896a5..11edab08d 100644 --- a/audio/sdlaudio.c +++ b/audio/sdlaudio.c @@ -25,6 +25,13 @@ #include <SDL_thread.h> #include "vl.h" +#ifndef _WIN32 +#ifdef __sun__ +#define _POSIX_PTHREAD_SEMANTICS 1 +#endif +#include <signal.h> +#endif + #define AUDIO_CAP "sdl" #include "audio_int.h" @@ -177,11 +184,22 @@ static int sdl_to_audfmt (int sdlfmt, audfmt_e *fmt, int *endianess) static int sdl_open (SDL_AudioSpec *req, SDL_AudioSpec *obt) { int status; +#ifndef _WIN32 + sigset_t new, old; + + /* Make sure potential threads created by SDL don't hog signals. */ + sigfillset (&new); + pthread_sigmask (SIG_BLOCK, &new, &old); +#endif status = SDL_OpenAudio (req, obt); if (status) { sdl_logerr ("SDL_OpenAudio failed\n"); } + +#ifndef _WIN32 + pthread_sigmask (SIG_SETMASK, &old, 0); +#endif return status; } |