summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaroslav Kysela <perex@perex.cz>2020-06-08 12:02:53 +0200
committerJaroslav Kysela <perex@perex.cz>2020-06-08 12:03:33 +0200
commite9a36ca224c20465c1461dc510a3405ea99a1c99 (patch)
tree03e1c958ef97d96a6b718e31936ee8055f9f9de2
parent515b336801b3ad1838723e2084683f09eeccfb23 (diff)
downloadalsa-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.c35
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 *