aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Bogorodskiy <novel@FreeBSD.org>2022-04-01 13:22:22 +0000
committerRoman Bogorodskiy <novel@FreeBSD.org>2022-04-01 13:31:14 +0000
commit19c1081a114f1612e7b71524d2e945ef64a020ac (patch)
treecb6281b177edb981f73dc3e0234bd5a209a008a1
parent1ca92b55c1bfa84fd8a2d2b52767a4979d6f17e5 (diff)
downloadports-19c1081a114f1612e7b71524d2e945ef64a020ac.tar.gz
ports-19c1081a114f1612e7b71524d2e945ef64a020ac.zip
security/libgpg-error: improve threading detection
Pull the upstream patch to improve threading detection. This is expected to only fix issues on the older non-supported FreeBSD releases, so do not bump PORTREVISION. Obtained from: upstream
-rw-r--r--security/libgpg-error/files/patch-posix-lock-fix85
1 files changed, 85 insertions, 0 deletions
diff --git a/security/libgpg-error/files/patch-posix-lock-fix b/security/libgpg-error/files/patch-posix-lock-fix
new file mode 100644
index 000000000000..af29591e9205
--- /dev/null
+++ b/security/libgpg-error/files/patch-posix-lock-fix
@@ -0,0 +1,85 @@
+From 6e17e70bb7eea1f6ed4c08f795ea65a09f89d38f Mon Sep 17 00:00:00 2001
+From: NIIBE Yutaka <gniibe@fsij.org>
+Date: Mon, 28 Mar 2022 13:36:19 +0900
+Subject: [PATCH] core: Fix support of posix-lock for FreeBSD.
+
+* src/posix-lock.c [__FreeBSD__] (use_pthread_p): Use
+pthread_key_create to determine if it's linked to lpthread or not.
+
+--
+
+This is from glthread_in_use in gnulib/lib/glthread/threadlib.c.
+
+On FreeBSD, pthread_key_create in there in libc (stub function) as
+well as -lpthread (real one), while pthread_create is not available
+in libc.
+
+Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
+---
+ src/posix-lock.c | 36 +++++++++++++++++++++++++++++++++++-
+ 1 file changed, 35 insertions(+), 1 deletion(-)
+
+diff --git a/src/posix-lock.c b/src/posix-lock.c
+index d0fd07a..85ec660 100644
+--- src/posix-lock.c
++++ src/posix-lock.c
+@@ -67,6 +67,38 @@
+ # endif
+ # endif /*!USE_POSIX_THREADS_WEAK*/
+ # if PTHREAD_IN_USE_DETECTION_HARD
++# if defined __FreeBSD__ || defined __DragonFly__ /* FreeBSD */
++
++/* Test using pthread_key_create. */
++
++static int
++use_pthread_p (void)
++{
++ static int tested;
++ static int result; /* 1: linked with -lpthread, 0: only with libc */
++
++ if (!tested)
++ {
++ pthread_key_t key;
++ int err = pthread_key_create (&key, NULL);
++
++ if (err == ENOSYS)
++ result = 0;
++ else
++ {
++ result = 1;
++ if (err == 0)
++ pthread_key_delete (key);
++ }
++ tested = 1;
++ }
++ return result;
++}
++
++# else /* Solaris, HP-UX */
++
++/* Test using pthread_create. */
++
+ /* The function to be executed by a dummy thread. */
+ static void *
+ dummy_thread_func (void *arg)
+@@ -84,7 +116,7 @@ use_pthread_p (void)
+ {
+ pthread_t thread;
+
+- if (pthread_create (&thread, NULL, dummy_thread_func, NULL))
++ if (pthread_create (&thread, NULL, dummy_thread_func, NULL) != 0)
+ result = 0; /* Thread creation failed. */
+ else
+ {
+@@ -102,6 +134,8 @@ use_pthread_p (void)
+ }
+ return result;
+ }
++# endif /* Solaris, HP-UX */
++
+ # endif /*PTHREAD_IN_USE_DETECTION_HARD*/
+ #endif /*USE_POSIX_THREADS*/
+
+--
+2.11.0
+