[alsa-devel] [PATCH alsa-lib 1/2] build: Define __USE_UNIX98 for old glibc
Otherwise PTHREAD_MUTEX_RECURSIVE isn't defined and we get an error with old glibc.
Signed-off-by: Takashi Iwai tiwai@suse.de --- src/pcm/pcm_local.h | 1 + 1 file changed, 1 insertion(+)
diff --git a/src/pcm/pcm_local.h b/src/pcm/pcm_local.h index 32e6dcdf6fcd..e4f652187c49 100644 --- a/src/pcm/pcm_local.h +++ b/src/pcm/pcm_local.h @@ -35,6 +35,7 @@ #include "local.h"
#ifdef THREAD_SAFE_API +#define __USE_UNIX98 1 /* for old glibc */ #include <pthread.h> #endif
Check the availability of PTHREAD_MUTEX_RECURSIVE in configure script and use it only when possible. A fairly old version of glibc still seems working, but just to be sure.
Signed-off-by: Takashi Iwai tiwai@suse.de --- configure.ac | 9 +++++++++ src/conf.c | 2 ++ src/pcm/pcm.c | 2 ++ 3 files changed, 13 insertions(+)
diff --git a/configure.ac b/configure.ac index ec254762bed6..a17f2c4aef5c 100644 --- a/configure.ac +++ b/configure.ac @@ -266,6 +266,15 @@ else AC_MSG_RESULT(no) fi
+dnl Check for pthread +if test "$HAVE_LIBPTHREAD" = "yes"; then + AC_CHECK_DECL(PTHREAD_MUTEX_RECURSIVE, + AC_DEFINE(HAVE_PTHREAD_MUTEX_RECURSIVE, [], + [Define if your pthreads implementation have PTHREAD_MUTEX_RECURSIVE]), + , + [#include <pthread.h>]) +fi + dnl Check for __thread AC_MSG_CHECKING([for __thread]) AC_LINK_IFELSE([AC_LANG_PROGRAM([#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) && ((__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 1) || (__GNUC__ == 4 && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ < 2)) diff --git a/src/conf.c b/src/conf.c index 2b52b44e9144..9a887433a4fe 100644 --- a/src/conf.c +++ b/src/conf.c @@ -490,7 +490,9 @@ static void snd_config_init_mutex(void) pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr); +#ifdef HAVE_PTHREAD_MUTEX_RECURSIVE pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); +#endif pthread_mutex_init(&snd_config_update_mutex, &attr); pthread_mutexattr_destroy(&attr); } diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c index 8a7a5950de3c..200b10c2c09c 100644 --- a/src/pcm/pcm.c +++ b/src/pcm/pcm.c @@ -2600,7 +2600,9 @@ int snd_pcm_new(snd_pcm_t **pcmp, snd_pcm_type_t type, const char *name, INIT_LIST_HEAD(&pcm->async_handlers); #ifdef THREAD_SAFE_API pthread_mutexattr_init(&attr); +#ifdef HAVE_PTHREAD_MUTEX_RECURSIVE pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); +#endif pthread_mutex_init(&pcm->lock, &attr); /* use locking as default; * each plugin may suppress this in its open call
participants (1)
-
Takashi Iwai