Rename pthread wrappers used for Windows to althread
This commit is contained in:
@@ -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
@@ -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
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user