1 /* 2 SDL - Simple DirectMedia Layer 3 Copyright (C) 1997-2012 Sam Lantinga 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with this library; if not, write to the Free Software 17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 18 19 Sam Lantinga 20 slouken (at) libsdl.org 21 */ 22 #include "SDL_config.h" 23 24 /* 25 * GNU pth mutexes 26 * 27 * Patrice Mandin 28 */ 29 30 #include <pth.h> 31 32 #include "SDL_mutex.h" 33 #include "SDL_sysmutex_c.h" 34 35 /* Create a mutex */ 36 SDL_mutex *SDL_CreateMutex(void) 37 { 38 SDL_mutex *mutex; 39 40 /* Allocate mutex memory */ 41 mutex = (SDL_mutex *)SDL_malloc(sizeof(*mutex)); 42 if ( mutex ) { 43 /* Create the mutex, with initial value signaled */ 44 if (!pth_mutex_init(&(mutex->mutexpth_p))) { 45 SDL_SetError("Couldn't create mutex"); 46 SDL_free(mutex); 47 mutex = NULL; 48 } 49 } else { 50 SDL_OutOfMemory(); 51 } 52 return(mutex); 53 } 54 55 /* Free the mutex */ 56 void SDL_DestroyMutex(SDL_mutex *mutex) 57 { 58 if ( mutex ) { 59 SDL_free(mutex); 60 } 61 } 62 63 /* Lock the mutex */ 64 int SDL_mutexP(SDL_mutex *mutex) 65 { 66 if ( mutex == NULL ) { 67 SDL_SetError("Passed a NULL mutex"); 68 return -1; 69 } 70 71 pth_mutex_acquire(&(mutex->mutexpth_p), FALSE, NULL); 72 73 return(0); 74 } 75 76 /* Unlock the mutex */ 77 int SDL_mutexV(SDL_mutex *mutex) 78 { 79 if ( mutex == NULL ) { 80 SDL_SetError("Passed a NULL mutex"); 81 return -1; 82 } 83 84 pth_mutex_release(&(mutex->mutexpth_p)); 85 86 return(0); 87 } 88