diff src/thread/pth/SDL_sysmutex.c @ 329:1d74ddc90cb2

Patrice's fixes for GNU Pthread support
author Sam Lantinga <slouken@libsdl.org>
date Mon, 01 Apr 2002 15:35:28 +0000
parents
children 3692456e7b0f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/thread/pth/SDL_sysmutex.c	Mon Apr 01 15:35:28 2002 +0000
@@ -0,0 +1,67 @@
+/*
+ *	GNU pth mutexes
+ *
+ *	Patrice Mandin
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <pth.h>
+
+#include "SDL_error.h"
+#include "SDL_mutex.h"
+#include "SDL_sysmutex_c.h"
+
+/* Create a mutex */
+SDL_mutex *SDL_CreateMutex(void)
+{
+	SDL_mutex *mutex;
+
+	/* Allocate mutex memory */
+	mutex = (SDL_mutex *)malloc(sizeof(*mutex));
+	if ( mutex ) {
+		/* Create the mutex, with initial value signaled */
+	    if (!pth_mutex_init(&(mutex->mutexpth_p))) {
+			SDL_SetError("Couldn't create mutex");
+			free(mutex);
+			mutex = NULL;
+		}
+	} else {
+		SDL_OutOfMemory();
+	}
+	return(mutex);
+}
+
+/* Free the mutex */
+void SDL_DestroyMutex(SDL_mutex *mutex)
+{
+	if ( mutex ) {
+		free(mutex);
+	}
+}
+
+/* Lock the mutex */
+int SDL_mutexP(SDL_mutex *mutex)
+{
+	if ( mutex == NULL ) {
+		SDL_SetError("Passed a NULL mutex");
+		return -1;
+	}
+
+	pth_mutex_acquire(&(mutex->mutexpth_p), FALSE, NULL);
+
+	return(0);
+}
+
+/* Unlock the mutex */
+int SDL_mutexV(SDL_mutex *mutex)
+{
+	if ( mutex == NULL ) {
+		SDL_SetError("Passed a NULL mutex");
+		return -1;
+	}
+
+    pth_mutex_release(&(mutex->mutexpth_p));
+
+	return(0);
+}