From e784ba70e016eed3203e403256f87b34dd6ef48b Mon Sep 17 00:00:00 2001 From: ths Date: Wed, 11 Jul 2007 23:23:15 +0000 Subject: [PATCH] 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 --- audio/sdlaudio.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/audio/sdlaudio.c b/audio/sdlaudio.c index f2a6896a52..11edab08d8 100644 --- a/audio/sdlaudio.c +++ b/audio/sdlaudio.c @@ -25,6 +25,13 @@ #include #include "vl.h" +#ifndef _WIN32 +#ifdef __sun__ +#define _POSIX_PTHREAD_SEMANTICS 1 +#endif +#include +#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; }