diff src/thread/dc/SDL_syssem.c @ 1851:536b0704b7d8

Make sure sem_wait didn't return early with EINTR. Fixes Bugzilla #231.
author Ryan C. Gordon <icculus@icculus.org>
date Wed, 17 May 2006 23:42:48 +0000
parents d910939febfa
children c121d94672cb a1b03ba2fcd0
line wrap: on
line diff
--- a/src/thread/dc/SDL_syssem.c	Wed May 17 18:57:04 2006 +0000
+++ b/src/thread/dc/SDL_syssem.c	Wed May 17 23:42:48 2006 +0000
@@ -19,6 +19,9 @@
     Sam Lantinga
     slouken@libsdl.org
 */
+
+#include <errno.h>
+
 #include "SDL_config.h"
 
 /* An implementation of semaphores using mutexes and condition variables */
@@ -135,13 +138,15 @@
 
 int SDL_SemWait(SDL_sem *sem)
 {
+	int retval;
+
 	if ( ! sem ) {
 		SDL_SetError("Passed a NULL semaphore");
 		return -1;
 	}
 
-	sem_wait(&sem->sem);
-	return 0;
+	while ( ((retval = sem_wait(&sem->sem)) == -1) && (errno == EINTR) ) {}
+	return retval;
 }
 
 Uint32 SDL_SemValue(SDL_sem *sem)