gnunet-fuse: Fix compile with glibc

Always use pthread_mutexattr_settype() the
pthread_mutexattr_setkind_np() function is not available in the
glibc and musl version used by OpenWrt.

This fixes the following compile error:
arc-openwrt-linux-gnu/bin/ld: gnunet_fuse-mutex.o: in function `GNUNET_mutex_create':
mutex.c:(.text+0x14): undefined reference to `pthread_mutexattr_setkind_np'
arc-openwrt-linux-gnu/bin/ld: mutex.c:(.text+0x14): undefined reference to `pthread_mutexattr_setkind_np'
arc-openwrt-linux-gnu/bin/ld: mutex.c:(.text+0x76): undefined reference to `pthread_mutexattr_setkind_np'
arc-openwrt-linux-gnu/bin/ld: mutex.c:(.text+0x76): undefined reference to `pthread_mutexattr_setkind_np'
collect2: error: ld returned 1 exit status

This patch was taken from:
https://aur.archlinux.org/cgit/aur.git/plain/pthread_mutexattr_settype.patch?h=gnunet-fuse

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
Hauke Mehrtens 2022-08-15 13:41:31 +02:00 committed by Rosen Penev
parent f3a3184d32
commit 1d795f2c1e
2 changed files with 50 additions and 33 deletions

View file

@ -1,33 +0,0 @@
--- a/src/fuse/mutex.c
+++ b/src/fuse/mutex.c
@@ -68,8 +68,13 @@ GNUNET_mutex_create (int isRecursive)
if (isRecursive)
{
#ifdef __linux__
+#if defined(__UCLIBC__) || defined(__GLIBC__)
GNUNET_assert (0 == pthread_mutexattr_setkind_np
(&attr, PTHREAD_MUTEX_RECURSIVE_NP));
+#else
+ GNUNET_assert (0 == pthread_mutexattr_settype
+ (&attr, PTHREAD_MUTEX_RECURSIVE));
+#endif
#elif BSD || SOLARIS || OSX || WINDOWS
GNUNET_assert (0 == pthread_mutexattr_settype
(&attr, PTHREAD_MUTEX_RECURSIVE));
@@ -78,11 +83,16 @@ GNUNET_mutex_create (int isRecursive)
else
{
#ifdef __linux__
+#if defined(__UCLIBC__) || defined(__GLIBC__)
GNUNET_assert (0 == pthread_mutexattr_setkind_np
(&attr, PTHREAD_MUTEX_ERRORCHECK_NP));
#else
GNUNET_assert (0 == pthread_mutexattr_settype
(&attr, PTHREAD_MUTEX_ERRORCHECK));
+#endif
+#else
+ GNUNET_assert (0 == pthread_mutexattr_settype
+ (&attr, PTHREAD_MUTEX_ERRORCHECK));
#endif
}
mut = GNUNET_new (struct GNUNET_Mutex);

View file

@ -0,0 +1,50 @@
Always use pthread_mutexattr_settype() the
pthread_mutexattr_setkind_np() is not available in the glibc and musl
version used by OpenWrt.
This patch was taken from:
https://aur.archlinux.org/cgit/aur.git/plain/pthread_mutexattr_settype.patch?h=gnunet-fuse
--- a/src/fuse/mutex.c
+++ b/src/fuse/mutex.c
@@ -35,16 +35,6 @@
#endif
#endif
-/**
- * This prototype is somehow missing in various Linux pthread
- * include files. But we need it and it seems to be available
- * on all pthread-systems so far. Odd.
- */
-#ifndef _MSC_VER
-extern int pthread_mutexattr_setkind_np (pthread_mutexattr_t * attr,
- int kind);
-#endif
-
/**
* @brief Structure for MUTual EXclusion (Mutex).
@@ -67,23 +57,13 @@ GNUNET_mutex_create (int isRecursive)
pthread_mutexattr_init (&attr);
if (isRecursive)
{
-#ifdef __linux__
- GNUNET_assert (0 == pthread_mutexattr_setkind_np
- (&attr, PTHREAD_MUTEX_RECURSIVE_NP));
-#elif BSD || SOLARIS || OSX || WINDOWS
GNUNET_assert (0 == pthread_mutexattr_settype
(&attr, PTHREAD_MUTEX_RECURSIVE));
-#endif
}
else
{
-#ifdef __linux__
- GNUNET_assert (0 == pthread_mutexattr_setkind_np
- (&attr, PTHREAD_MUTEX_ERRORCHECK_NP));
-#else
GNUNET_assert (0 == pthread_mutexattr_settype
(&attr, PTHREAD_MUTEX_ERRORCHECK));
-#endif
}
mut = GNUNET_new (struct GNUNET_Mutex);
GNUNET_assert (0 == pthread_mutex_init (&mut->pt, &attr));