summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/library.c19
-rw-r--r--configure.ac2
2 files changed, 20 insertions, 1 deletions
diff --git a/common/library.c b/common/library.c
index c1275f3..b72465b 100644
--- a/common/library.c
+++ b/common/library.c
@@ -138,6 +138,23 @@ _p11_library_get_thread_local (void)
}
#endif
+#if defined(HAVE_DECL___REGISTER_ATFORK) && !HAVE_DECL___REGISTER_ATFORK
+extern int __register_atfork (void (*prepare) (void), void (*parent) (void),
+ void (*child) (void), void *dso_handle);
+#endif /* HAVE_DECL___REGISTER_ATFORK */
+
+#ifdef HAVE___REGISTER_ATFORK
+
+#define p11_register_atfork(a,b,c,d) \
+ (__register_atfork((a),(b),(c),(d)))
+
+#else
+
+#define p11_register_atfork(a,b,c,d) \
+ (pthread_atfork((a),(b),(c)))
+
+#endif /* HAVE___REGISTER_ATFORK */
+
static void
count_forks (void)
{
@@ -160,7 +177,7 @@ p11_library_init_impl (void)
p11_message_locale = newlocale (LC_ALL_MASK, "POSIX", (locale_t) 0);
#endif
- pthread_atfork (NULL, NULL, count_forks);
+ p11_register_atfork (NULL, NULL, count_forks, NULL);
}
void
diff --git a/configure.ac b/configure.ac
index d4ff1ad..24e9519 100644
--- a/configure.ac
+++ b/configure.ac
@@ -123,6 +123,8 @@ if test "$os_unix" = "yes"; then
AC_CHECK_FUNCS([setenv])
AC_CHECK_FUNCS([getpeereid])
AC_CHECK_FUNCS([getpeerucred])
+ AC_CHECK_FUNCS([__register_atfork])
+ AC_CHECK_DECLS([__register_atfork])
# Check if issetugid() is available and has compatible behavior with OpenBSD
AC_CHECK_FUNCS([issetugid], [