Rename pthread wrappers used for Windows to althread

This commit is contained in:
Chris Robinson
2013-12-06 02:12:45 -08:00
parent 3f5914e094
commit a846418964
3 changed files with 48 additions and 34 deletions
+15 -15
View File
@@ -680,7 +680,7 @@ static const ALchar alExtList[] =
static volatile ALCenum LastNullDeviceError = ALC_NO_ERROR;
/* Thread-local current context */
static pthread_key_t LocalContext;
static althread_key_t LocalContext;
/* Process-wide current context */
static ALCcontext *volatile GlobalContext = NULL;
@@ -698,7 +698,7 @@ enum LogLevel LogLevel = LogError;
static ALCboolean TrapALCError = ALC_FALSE;
/* One-time configuration init control */
static pthread_once_t alc_config_once = PTHREAD_ONCE_INIT;
static althread_once_t alc_config_once = ALTHREAD_ONCE_INIT;
/* Default effect that applies to sources that don't have an effect on send 0 */
static ALeffect DefaultEffect;
@@ -768,7 +768,7 @@ BOOL APIENTRY DllMain(HINSTANCE hModule,DWORD ul_reason_for_call,LPVOID lpReserv
LockUIntMapRead(&TlsDestructor);
for(i = 0;i < TlsDestructor.size;i++)
{
void *ptr = pthread_getspecific(TlsDestructor.array[i].key);
void *ptr = althread_getspecific(TlsDestructor.array[i].key);
void (*callback)(void*) = (void(*)(void*))TlsDestructor.array[i].value;
if(ptr && callback)
callback(ptr);
@@ -833,7 +833,7 @@ static void alc_init(void)
if(str && (strcasecmp(str, "true") == 0 || strtol(str, NULL, 0) == 1))
ZScale *= -1.0f;
pthread_key_create(&LocalContext, ReleaseThreadCtx);
althread_key_create(&LocalContext, ReleaseThreadCtx);
InitializeCriticalSection(&ListLock);
ThunkInit();
}
@@ -1107,7 +1107,7 @@ static void alc_initconfig(void)
if((str && str[0]) || ConfigValueStr(NULL, "default-reverb", &str))
LoadReverbPreset(str, &DefaultEffect);
}
#define DO_INITCONFIG() pthread_once(&alc_config_once, alc_initconfig)
#define DO_INITCONFIG() althread_once(&alc_config_once, alc_initconfig)
/************************************************
@@ -1148,7 +1148,7 @@ static void alc_deinit_safe(void)
ThunkExit();
DeleteCriticalSection(&ListLock);
pthread_key_delete(LocalContext);
althread_key_delete(LocalContext);
if(LogFile != stderr)
fclose(LogFile);
@@ -2093,10 +2093,10 @@ static void ReleaseContext(ALCcontext *context, ALCdevice *device)
{
ALCcontext *volatile*tmp_ctx;
if(pthread_getspecific(LocalContext) == context)
if(althread_getspecific(LocalContext) == context)
{
WARN("%p released while current on thread\n", context);
pthread_setspecific(LocalContext, NULL);
althread_setspecific(LocalContext, NULL);
ALCcontext_DecRef(context);
}
@@ -2177,7 +2177,7 @@ ALCcontext *GetContextRef(void)
{
ALCcontext *context;
context = pthread_getspecific(LocalContext);
context = althread_getspecific(LocalContext);
if(context)
ALCcontext_IncRef(context);
else
@@ -2746,7 +2746,7 @@ ALC_API ALCcontext* ALC_APIENTRY alcGetCurrentContext(void)
{
ALCcontext *Context;
Context = pthread_getspecific(LocalContext);
Context = althread_getspecific(LocalContext);
if(!Context) Context = GlobalContext;
return Context;
@@ -2759,7 +2759,7 @@ ALC_API ALCcontext* ALC_APIENTRY alcGetCurrentContext(void)
ALC_API ALCcontext* ALC_APIENTRY alcGetThreadContext(void)
{
ALCcontext *Context;
Context = pthread_getspecific(LocalContext);
Context = althread_getspecific(LocalContext);
return Context;
}
@@ -2781,9 +2781,9 @@ ALC_API ALCboolean ALC_APIENTRY alcMakeContextCurrent(ALCcontext *context)
context = ExchangePtr((XchgPtr*)&GlobalContext, context);
if(context) ALCcontext_DecRef(context);
if((context=pthread_getspecific(LocalContext)) != NULL)
if((context=althread_getspecific(LocalContext)) != NULL)
{
pthread_setspecific(LocalContext, NULL);
althread_setspecific(LocalContext, NULL);
ALCcontext_DecRef(context);
}
@@ -2805,8 +2805,8 @@ ALC_API ALCboolean ALC_APIENTRY alcSetThreadContext(ALCcontext *context)
return ALC_FALSE;
}
/* context's reference count is already incremented */
old = pthread_getspecific(LocalContext);
pthread_setspecific(LocalContext, context);
old = althread_getspecific(LocalContext);
althread_setspecific(LocalContext, context);
if(old) ALCcontext_DecRef(old);
return ALC_TRUE;
+24 -12
View File
@@ -8,21 +8,21 @@
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
typedef DWORD pthread_key_t;
int pthread_key_create(pthread_key_t *key, void (*callback)(void*));
int pthread_key_delete(pthread_key_t key);
void *pthread_getspecific(pthread_key_t key);
int pthread_setspecific(pthread_key_t key, void *val);
typedef DWORD althread_key_t;
int althread_key_create(althread_key_t *key, void (*callback)(void*));
int althread_key_delete(althread_key_t key);
void *althread_getspecific(althread_key_t key);
int althread_setspecific(althread_key_t key, void *val);
typedef LONG althread_once_t;
#define ALTHREAD_ONCE_INIT 0
void althread_once(althread_once_t *once, void (*callback)(void));
inline int alsched_yield(void)
{ SwitchToThread(); return 0; }
WCHAR *strdupW(const WCHAR *str);
typedef LONG pthread_once_t;
#define PTHREAD_ONCE_INIT 0
void pthread_once(pthread_once_t *once, void (*callback)(void));
static inline int sched_yield(void)
{ SwitchToThread(); return 0; }
#define HAVE_DYNLOAD 1
#else
@@ -38,6 +38,18 @@ void LeaveCriticalSection(CRITICAL_SECTION *cs);
ALuint timeGetTime(void);
void Sleep(ALuint t);
#define althread_key_t pthread_key_t
#define althread_key_create pthread_key_create
#define althread_key_delete pthread_key_delete
#define althread_getspecific pthread_getspecific
#define althread_setspecific pthread_setspecific
#define althread_once_t pthread_once_t
#define ALTHREAD_ONCE_INIT PTHREAD_ONCE_INIT
#define althread_once pthread_once
#define alsched_yield sched_yield
#if defined(HAVE_DLFCN_H)
#define HAVE_DYNLOAD 1
#endif
+9 -7
View File
@@ -291,18 +291,20 @@ void RestoreFPUMode(const FPUCtl *ctl)
#ifdef _WIN32
void pthread_once(pthread_once_t *once, void (*callback)(void))
extern inline int alsched_yield(void);
void althread_once(althread_once_t *once, void (*callback)(void))
{
LONG ret;
while((ret=InterlockedExchange(once, 1)) == 1)
sched_yield();
alsched_yield();
if(ret == 0)
callback();
InterlockedExchange(once, 2);
}
int pthread_key_create(pthread_key_t *key, void (*callback)(void*))
int althread_key_create(althread_key_t *key, void (*callback)(void*))
{
*key = TlsAlloc();
if(callback)
@@ -310,17 +312,17 @@ int pthread_key_create(pthread_key_t *key, void (*callback)(void*))
return 0;
}
int pthread_key_delete(pthread_key_t key)
int althread_key_delete(althread_key_t key)
{
InsertUIntMapEntry(&TlsDestructor, key, NULL);
TlsFree(key);
return 0;
}
void *pthread_getspecific(pthread_key_t key)
void *althread_getspecific(althread_key_t key)
{ return TlsGetValue(key); }
int pthread_setspecific(pthread_key_t key, void *val)
int althread_setspecific(althread_key_t key, void *val)
{
TlsSetValue(key, val);
return 0;
@@ -524,7 +526,7 @@ void SetRTPriority(void)
static void Lock(volatile ALenum *l)
{
while(ExchangeInt(l, AL_TRUE) == AL_TRUE)
sched_yield();
alsched_yield();
}
static void Unlock(volatile ALenum *l)