2 SDL - Simple DirectMedia Layer
3 Copyright (C) 1997-2009 Sam Lantinga
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.
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.
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
22 #include "SDL_config.h"
24 /* Mutex functions using the OS/2 API */
26 #define INCL_DOSERRORS
27 #define INCL_DOSSEMAPHORES
30 #include "SDL_mutex.h"
38 DECLSPEC SDL_mutex * SDLCALL SDL_CreateMutex(void)
43 /* Allocate mutex memory */
44 mutex = (SDL_mutex *)SDL_malloc(sizeof(*mutex));
47 /* Create the mutex, with initial value signaled */
48 ulrc = DosCreateMutexSem(NULL, // Create unnamed semaphore
49 &(mutex->hmtxID), // Pointer to handle
50 0L, // Flags: create it private (not shared)
51 FALSE); // Initial value: unowned
54 SDL_SetError("Couldn't create mutex");
65 DECLSPEC void SDLCALL SDL_DestroyMutex(SDL_mutex *mutex)
71 DosCloseMutexSem(mutex->hmtxID);
79 DECLSPEC int SDLCALL SDL_mutexP(SDL_mutex *mutex)
83 SDL_SetError("Passed a NULL mutex");
86 if ( DosRequestMutexSem(mutex->hmtxID, SEM_INDEFINITE_WAIT) != NO_ERROR )
88 SDL_SetError("Couldn't wait on mutex");
94 /* Unlock the mutex */
95 DECLSPEC int SDLCALL SDL_mutexV(SDL_mutex *mutex)
99 SDL_SetError("Passed a NULL mutex");
102 if ( DosReleaseMutexSem(mutex->hmtxID) != NO_ERROR )
104 SDL_SetError("Couldn't release mutex");