Fixed blocking open bug when using blocking audio writes
authorSam Lantinga <slouken@lokigames.com>
Mon, 09 Jul 2001 15:46:41 +0000
changeset 96 799bea5504e2
parent 95 d84a06e0c358
child 97 c7bcdece4845
Fixed blocking open bug when using blocking audio writes
src/audio/dsp/SDL_dspaudio.c
--- a/src/audio/dsp/SDL_dspaudio.c	Sun Jul 08 09:03:47 2001 +0000
+++ b/src/audio/dsp/SDL_dspaudio.c	Mon Jul 09 15:46:41 2001 +0000
@@ -58,11 +58,7 @@
 
 /* Open the audio device for playback, and don't block if busy */
 #define USE_BLOCKING_WRITES
-#ifdef USE_BLOCKING_WRITES
-#define OPEN_FLAGS	O_WRONLY
-#else
 #define OPEN_FLAGS	(O_WRONLY|O_NONBLOCK)
-#endif
 
 /* Audio driver functions */
 static int DSP_OpenAudio(_THIS, SDL_AudioSpec *spec);
@@ -339,6 +335,18 @@
 	}
 	mixbuf = NULL;
 
+#ifdef USE_BLOCKING_WRITES
+	/* Make the file descriptor use blocking writes with fcntl() */
+	{ long flags;
+		flags = fcntl(audio_fd, F_GETFL);
+		flags &= ~O_NONBLOCK;
+		if ( fcntl(audio_fd, F_SETFL, flags) < 0 ) {
+			SDL_SetError("Couldn't set audio blocking mode");
+			return(-1);
+		}
+	}
+#endif
+
 	/* Get a list of supported hardware formats */
 	if ( ioctl(audio_fd, SNDCTL_DSP_GETFMTS, &value) < 0 ) {
 		SDL_SetError("Couldn't get audio format list");