mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-11-03 09:01:52 -05:00
conf.c: use portable way to initialize recursive mutex
PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP is not in POSIX, as _NP (non-portable) suggests. exposing such a symbol in musl libc would lock in the ABI for all times and makes it impossible to do future changes to the under- lying struct without hideous symbol versioning hacks. use the portable way instead: pthread_once was designed for such cases. Signed-off-by: Timo Teräs <timo.teras@iki.fi> Tested-by: John Spencer <maillist-alsa@barfooze.de> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
7d06b3ed9f
commit
ae035b7fe5
1 changed files with 13 additions and 2 deletions
15
src/conf.c
15
src/conf.c
|
|
@ -427,8 +427,8 @@ beginning:</P>
|
|||
#ifndef DOC_HIDDEN
|
||||
|
||||
#ifdef HAVE_LIBPTHREAD
|
||||
static pthread_mutex_t snd_config_update_mutex =
|
||||
PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
|
||||
static pthread_mutex_t snd_config_update_mutex;
|
||||
static pthread_once_t snd_config_update_mutex_once = PTHREAD_ONCE_INIT;
|
||||
#endif
|
||||
|
||||
struct _snd_config {
|
||||
|
|
@ -472,8 +472,19 @@ typedef struct {
|
|||
|
||||
#ifdef HAVE_LIBPTHREAD
|
||||
|
||||
static void snd_config_init_mutex(void)
|
||||
{
|
||||
pthread_mutexattr_t attr;
|
||||
|
||||
pthread_mutexattr_init(&attr);
|
||||
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
|
||||
pthread_mutex_init(&snd_config_update_mutex, &attr);
|
||||
pthread_mutexattr_destroy(&attr);
|
||||
}
|
||||
|
||||
static inline void snd_config_lock(void)
|
||||
{
|
||||
pthread_once(&snd_config_update_mutex_once, snd_config_init_mutex);
|
||||
pthread_mutex_lock(&snd_config_update_mutex);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue