mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-25 03:00:46 +00:00
Re-implement our mutex_lock() family of functions using SDL's atomic spinlocks
git-svn-id: https://svn.eduke32.com/eduke32@7907 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
aec48c73c1
commit
064516c050
2 changed files with 11 additions and 16 deletions
|
@ -19,12 +19,12 @@ typedef HANDLE mutex_t;
|
|||
#else
|
||||
/* PK: I don't like pointer typedefs, but SDL_CreateMutex() _returns_ one,
|
||||
* so we're out of luck with our interface. */
|
||||
typedef SDL_mutex* mutex_t;
|
||||
typedef SDL_SpinLock mutex_t;
|
||||
#endif
|
||||
|
||||
extern int32_t mutex_init(mutex_t *mutex);
|
||||
extern int32_t mutex_lock(mutex_t *mutex);
|
||||
extern int32_t mutex_unlock(mutex_t *mutex);
|
||||
extern void mutex_lock(mutex_t *mutex);
|
||||
extern void mutex_unlock(mutex_t *mutex);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -13,30 +13,25 @@ int32_t mutex_init(mutex_t *mutex)
|
|||
*mutex = CreateMutex(0, FALSE, 0);
|
||||
return (*mutex == 0);
|
||||
#else
|
||||
if (mutex)
|
||||
{
|
||||
*mutex = SDL_CreateMutex();
|
||||
if (*mutex != NULL)
|
||||
return 0;
|
||||
}
|
||||
return -1;
|
||||
*mutex = 0;
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
int32_t mutex_lock(mutex_t *mutex)
|
||||
void mutex_lock(mutex_t *mutex)
|
||||
{
|
||||
#ifdef RENDERTYPEWIN
|
||||
return (WaitForSingleObject(*mutex, INFINITE) == WAIT_FAILED);
|
||||
return WaitForSingleObject(*mutex, INFINITE);
|
||||
#else
|
||||
return SDL_LockMutex(*mutex);
|
||||
return SDL_AtomicLock(mutex);
|
||||
#endif
|
||||
}
|
||||
|
||||
int32_t mutex_unlock(mutex_t *mutex)
|
||||
void mutex_unlock(mutex_t *mutex)
|
||||
{
|
||||
#ifdef RENDERTYPEWIN
|
||||
return (ReleaseMutex(*mutex) == 0);
|
||||
ReleaseMutex(*mutex);
|
||||
#else
|
||||
return SDL_UnlockMutex(*mutex);
|
||||
SDL_AtomicUnlock(mutex);
|
||||
#endif
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue