diff options
-rw-r--r-- | common/library.c | 19 | ||||
-rw-r--r-- | configure.ac | 2 |
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], [ |