diff options
author | Jaroslav Kysela <perex@perex.cz> | 2020-06-08 12:02:53 +0200 |
---|---|---|
committer | Jaroslav Kysela <perex@perex.cz> | 2020-06-08 12:03:33 +0200 |
commit | e9a36ca224c20465c1461dc510a3405ea99a1c99 (patch) | |
tree | 03e1c958ef97d96a6b718e31936ee8055f9f9de2 | |
parent | 515b336801b3ad1838723e2084683f09eeccfb23 (diff) | |
download | alsa-lib-e9a36ca224c20465c1461dc510a3405ea99a1c99.tar.gz |
dlsym: fix again snd_dlpath()
There is double lock in 8d866e4cd886991f605399af6bd6cf4ac6eea3e2 .
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-rw-r--r-- | src/dlmisc.c | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/src/dlmisc.c b/src/dlmisc.c index e3601721..2c7dc319 100644 --- a/src/dlmisc.c +++ b/src/dlmisc.c @@ -42,20 +42,20 @@ static char *snd_libdir_origin = NULL; #endif #ifdef HAVE_LIBPTHREAD -static pthread_mutex_t snd_dlobj_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t snd_dlpath_mutex = PTHREAD_MUTEX_INITIALIZER; -static inline void snd_dlobj_lock(void) +static inline void snd_dlpath_lock(void) { - pthread_mutex_lock(&snd_dlobj_mutex); + pthread_mutex_lock(&snd_dlpath_mutex); } -static inline void snd_dlobj_unlock(void) +static inline void snd_dlpath_unlock(void) { - pthread_mutex_unlock(&snd_dlobj_mutex); + pthread_mutex_unlock(&snd_dlpath_mutex); } #else -static inline void snd_dlobj_lock(void) {} -static inline void snd_dlobj_unlock(void) {} +static inline void snd_dlpath_lock(void) {} +static inline void snd_dlpath_unlock(void) {} #endif /** @@ -71,7 +71,7 @@ int snd_dlpath(char *path, size_t path_len, const char *name) #ifdef HAVE_LIBDL #ifdef __GLIBC__ static int plugin_dir_set = 0; - snd_dlobj_lock(); + snd_dlpath_lock(); if (!plugin_dir_set) { struct link_map *links; Dl_info info; @@ -85,7 +85,7 @@ int snd_dlpath(char *path, size_t path_len, const char *name) } plugin_dir_set = 1; } - snd_dlobj_unlock(); + snd_dlpath_unlock(); #endif #endif if (snd_libdir_origin) @@ -287,6 +287,23 @@ struct dlobj_cache { struct list_head list; }; +#ifdef HAVE_LIBPTHREAD +static pthread_mutex_t snd_dlobj_mutex = PTHREAD_MUTEX_INITIALIZER; + +static inline void snd_dlobj_lock(void) +{ + pthread_mutex_lock(&snd_dlobj_mutex); +} + +static inline void snd_dlobj_unlock(void) +{ + pthread_mutex_unlock(&snd_dlobj_mutex); +} +#else +static inline void snd_dlobj_lock(void) {} +static inline void snd_dlobj_unlock(void) {} +#endif + static LIST_HEAD(pcm_dlobj_list); static struct dlobj_cache * |