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:
terminx 2019-08-07 22:43:57 +00:00 committed by Christoph Oelckers
parent aec48c73c1
commit 064516c050
2 changed files with 11 additions and 16 deletions

View file

@ -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

View file

@ -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
}