diff options
author | Chris Robinson <[email protected]> | 2011-08-03 09:37:58 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2011-08-03 09:37:58 -0700 |
commit | b5092a62125620a0f6f61f4baf821f2c5b379c60 (patch) | |
tree | 37d309766f6b386a30142298470fe30bb0e08596 /Alc | |
parent | 81d401eab55792ece0c664db96f0390d9d0cbded (diff) |
Delay reading the config file on Windows, too
Diffstat (limited to 'Alc')
-rw-r--r-- | Alc/ALc.c | 22 |
1 files changed, 15 insertions, 7 deletions
@@ -509,10 +509,6 @@ static void alc_init(void) tls_create(&LocalContext); InitializeCriticalSection(&ListLock); ALTHUNK_INIT(); - -#ifdef _WIN32 - alc_initconfig(); -#endif } static void alc_deinit(void) @@ -665,11 +661,23 @@ static void alc_initconfig(void) } } -#ifndef _WIN32 +#ifdef _WIN32 +static struct once_control { + LONG canpass; + LONG hasrun; +} once_control = { TRUE, FALSE }; +static void call_once(struct once_control *once, void (*callback)(void)) +{ + while(InterlockedExchange(&once->canpass, FALSE) == FALSE) + Sleep(0); + if(InterlockedExchange(&once->hasrun, TRUE) == FALSE) + callback(); + InterlockedExchange(&once->canpass, TRUE); +} +#define DO_INITCONFIG() call_once(&once_control, alc_initconfig) +#else static pthread_once_t once_control = PTHREAD_ONCE_INIT; #define DO_INITCONFIG() pthread_once(&once_control, alc_initconfig) -#else -#define DO_INITCONFIG() #endif static void ProbeList(ALCchar **list, size_t *listsize, int type) |