From d5ff6e92550eca683899016539879c31556b044f Mon Sep 17 00:00:00 2001
From: deuce <>
Date: Mon, 29 May 2006 01:05:35 +0000
Subject: [PATCH] Use SDL_LockAudio/SDL_UnlockAudio as suggested by the docs.
 (Shouldn't actually be necessary, but oh well).

---
 src/xpdev/sdlfuncs.c | 18 ++++++++++++++++++
 src/xpdev/sdlfuncs.h |  2 ++
 src/xpdev/xpbeep.c   |  2 ++
 3 files changed, 22 insertions(+)

diff --git a/src/xpdev/sdlfuncs.c b/src/xpdev/sdlfuncs.c
index b3c76b9202..a0640325d6 100644
--- a/src/xpdev/sdlfuncs.c
+++ b/src/xpdev/sdlfuncs.c
@@ -56,6 +56,8 @@ int load_sdl_funcs(struct sdlfuncs *sdlf)
 	sdlf->OpenAudio=SDL_OpenAudio;
 	sdlf->CloseAudio=SDL_CloseAudio;
 	sdlf->PauseAudio=SDL_PauseAudio;
+	sdlf->LockAudio=SDL_LockAudio;
+	sdlf->UnlockAudio=SDL_UnlockAudio;
 	sdlf->gotfuncs=1;
 	sdl_funcs_loaded=1;
 	return(0);
@@ -211,6 +213,14 @@ int load_sdl_funcs(struct sdlfuncs *sdlf)
 		FreeLibrary(sdl_dll);
 		return(-1);
 	}
+	if((sdlf->LockAudio=GetProcAddress(sdl_dll, "SDL_LockAudio"))==NULL) {
+		FreeLibrary(sdl_dll);
+		return(-1);
+	}
+	if((sdlf->UnlockAudio=GetProcAddress(sdl_dll, "SDL_UnlockAudio"))==NULL) {
+		FreeLibrary(sdl_dll);
+		return(-1);
+	}
 	sdlf->gotfuncs=1;
 	sdl_funcs_loaded=1;
 	return(0);
@@ -360,6 +370,14 @@ int load_sdl_funcs(struct sdlfuncs *sdlf)
 		dlclose(sdl_dll);
 		return(-1);
 	}
+	if((sdlf->LockAudio=dlsym(sdl_dll, "SDL_LockAudio"))==NULL) {
+		dlclose(sdl_dll);
+		return(-1);
+	}
+	if((sdlf->UnlockAudio=dlsym(sdl_dll, "SDL_UnlockAudio"))==NULL) {
+		dlclose(sdl_dll);
+		return(-1);
+	}
 	sdlf->gotfuncs=1;
 	sdl_funcs_loaded=1;
 	return(0);
diff --git a/src/xpdev/sdlfuncs.h b/src/xpdev/sdlfuncs.h
index 5525e6069e..127ae4edc3 100644
--- a/src/xpdev/sdlfuncs.h
+++ b/src/xpdev/sdlfuncs.h
@@ -42,6 +42,8 @@ struct sdlfuncs {
 	void (*QuitSubSystem)(Uint32 flags);
 	int (*OpenAudio)(SDL_AudioSpec *desired, SDL_AudioSpec *obtained);
 	void (*CloseAudio)(void);
+	void (*LockAudio)(void);
+	void (*UnlockAudio)(void);
 	void (*PauseAudio)(int pause_on);
 	int	gotfuncs;
 };
diff --git a/src/xpdev/xpbeep.c b/src/xpdev/xpbeep.c
index c6b12c761a..c69ba899ff 100644
--- a/src/xpdev/xpbeep.c
+++ b/src/xpdev/xpbeep.c
@@ -427,11 +427,13 @@ BOOL DLLCALL xptone(double freq, DWORD duration, enum WAVE_SHAPE shape)
 
 #ifdef WITH_SDL
 	if(handle_type==SOUND_DEVICE_SDL) {
+		sdl.LockAudio();
 		sdl_audio_buf_pos=0;
 		sdl_audio_buf_len=S_RATE*duration/1000;
 		if(sdl_audio_buf_len<=S_RATE/freq*2)
 			sdl_audio_buf_len=S_RATE/freq*2;
 		makewave(freq,swave,sdl_audio_buf_len,shape);
+		sdl.UnlockAudio();
 		sdl.PauseAudio(FALSE);
 		sdl.SemWait(sdlToneDone);
 		sdl.PauseAudio(TRUE);
-- 
GitLab