libgpg-error 1.44 fails to build on FreeBSD 11

NIIBE Yutaka gniibe at fsij.org
Mon Mar 28 13:07:43 CEST 2022


Hello,

Thank you for your report.

Roman Bogorodskiy wrote:
> Any ideas what would be the right fix?

For the particular code, libgpg-error uses a code from Gnulib.  Since it
was updated in Gnulib, we need to fix.  I pushed a change to fix this
issue.  Please test (with no change of src/Makefile.am).


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 is 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 at fsij.org>

diff --git a/src/posix-lock.c b/src/posix-lock.c
index d0fd07a..85ec660 100644
--- a/src/posix-lock.c
+++ b/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*/
 
-- 



More information about the Gnupg-devel mailing list