[6/8] Consolidate pthread_atfork
Commit Message
The pthread_atfork is similar between Linux and Hurd, only the compat
version bits differs. The generic version is place at sysdeps/pthread
with a common name.
It also fixes an issue with Hurd license, where the static-only object
did not use LGPL.
Checked on x86_64-linux-gnu, i686-linux-gnu, and with a build for
i686-gnu.
---
htl/Makefile | 4 +-
nptl/Makefile | 3 --
sysdeps/htl/old_pt-atfork.c | 26 ------------
sysdeps/htl/pt-atfork.c | 41 -------------------
sysdeps/htl/pthread_atfork_compat.h | 2 +
sysdeps/nptl/pthread_atfork_compat.h | 2 +
sysdeps/pthread/Makefile | 6 ++-
{nptl => sysdeps/pthread}/pthread_atfork.c | 0
.../pthread/pthread_atfork_compat.c | 11 +++--
9 files changed, 16 insertions(+), 79 deletions(-)
delete mode 100644 sysdeps/htl/old_pt-atfork.c
delete mode 100644 sysdeps/htl/pt-atfork.c
create mode 100644 sysdeps/htl/pthread_atfork_compat.h
create mode 100644 sysdeps/nptl/pthread_atfork_compat.h
rename {nptl => sysdeps/pthread}/pthread_atfork.c (100%)
rename nptl/old_pthread_atfork.c => sysdeps/pthread/pthread_atfork_compat.c (76%)
Comments
* Adhemerval Zanella via Libc-alpha:
> diff --git a/sysdeps/htl/pthread_atfork_compat.h b/sysdeps/htl/pthread_atfork_compat.h
> new file mode 100644
> index 0000000000..8943a148e8
> --- /dev/null
> +++ b/sysdeps/htl/pthread_atfork_compat.h
> @@ -0,0 +1,2 @@
> +#define PTHREAD_ATFORK_COMPAT_INTRODUCED GLIBC_2_12
> +#define PTHREAD_ATFORK_COMPAT_OBSOLETED GLIBC_2_23
> diff --git a/sysdeps/nptl/pthread_atfork_compat.h b/sysdeps/nptl/pthread_atfork_compat.h
> new file mode 100644
> index 0000000000..d3ab9373b3
> --- /dev/null
> +++ b/sysdeps/nptl/pthread_atfork_compat.h
> @@ -0,0 +1,2 @@
> +#define PTHREAD_ATFORK_COMPAT_INTRODUCED GLIBC_2_0
> +#define PTHREAD_ATFORK_COMPAT_OBSOLETED GLIBC_2_3
These files should have comments.
We need to move the pthread_atfork compatibility symbol eventually, but
that can wait.
Thanks,
Florian
On 09/03/2021 08:09, Florian Weimer wrote:
> * Adhemerval Zanella via Libc-alpha:
>
>> diff --git a/sysdeps/htl/pthread_atfork_compat.h b/sysdeps/htl/pthread_atfork_compat.h
>> new file mode 100644
>> index 0000000000..8943a148e8
>> --- /dev/null
>> +++ b/sysdeps/htl/pthread_atfork_compat.h
>> @@ -0,0 +1,2 @@
>> +#define PTHREAD_ATFORK_COMPAT_INTRODUCED GLIBC_2_12
>> +#define PTHREAD_ATFORK_COMPAT_OBSOLETED GLIBC_2_23
>> diff --git a/sysdeps/nptl/pthread_atfork_compat.h b/sysdeps/nptl/pthread_atfork_compat.h
>> new file mode 100644
>> index 0000000000..d3ab9373b3
>> --- /dev/null
>> +++ b/sysdeps/nptl/pthread_atfork_compat.h
>> @@ -0,0 +1,2 @@
>> +#define PTHREAD_ATFORK_COMPAT_INTRODUCED GLIBC_2_0
>> +#define PTHREAD_ATFORK_COMPAT_OBSOLETED GLIBC_2_3
>
> These files should have comments.
Ack.
>
> We need to move the pthread_atfork compatibility symbol eventually, but
> that can wait.
>
> Thanks,
> Florian
>
@@ -121,7 +121,6 @@ libpthread-routines := pt-attr pt-attr-destroy pt-attr-getdetachstate \
pt-sigstate-destroy \
pt-sigstate \
\
- old_pt-atfork \
pt-kill \
pt-getcpuclockid \
\
@@ -166,9 +165,8 @@ headers := \
distribute :=
-routines := forward libc_pthread_init alloca_cutoff pt-atfork
+routines := forward libc_pthread_init alloca_cutoff
shared-only-routines = forward
-static-only-routines = pt-atfork
extra-libs := libpthread
extra-libs-others := $(extra-libs)
@@ -38,7 +38,6 @@ routines = \
libc_pthread_init \
old_pthread_cond_destroy \
old_pthread_cond_init \
- pthread_atfork \
pthread_attr_copy \
pthread_attr_destroy \
pthread_attr_extension \
@@ -70,7 +69,6 @@ routines = \
pthread_sigmask \
shared-only-routines = forward
-static-only-routines = pthread_atfork
# We need to provide certain routines for compatibility with existing
# binaries.
@@ -134,7 +132,6 @@ libpthread-routines = nptl-init nptlfreeres vars events version pt-interp \
pthread_cancel pthread_testcancel \
pthread_setcancelstate pthread_setcanceltype \
pthread_once \
- old_pthread_atfork \
pthread_getcpuclockid \
shm-directory \
sem_init sem_destroy \
deleted file mode 100644
@@ -1,26 +0,0 @@
-/* Register fork handlers. Generic version.
- Copyright (C) 2002-2021 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <https://www.gnu.org/licenses/>. */
-
-#include <shlib-compat.h>
-
-#if SHLIB_COMPAT(libpthread, GLIBC_2_12, GLIBC_2_23)
-# define __pthread_atfork __dyn_pthread_atfork
-# include "pt-atfork.c"
-# undef __pthread_atfork
-compat_symbol (libpthread, __dyn_pthread_atfork, pthread_atfork, GLIBC_2_12);
-#endif
deleted file mode 100644
@@ -1,41 +0,0 @@
-/* Register fork handlers. Generic version.
- Copyright (C) 2002-2021 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <https://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <pt-internal.h>
-#include <fork.h>
-#include <dso_handle.h>
-
-/* Hide the symbol so that no definition but the one locally in the
- executable or DSO is used. */
-int
-#ifndef __pthread_atfork
-/* Don't mark the compatibility function as hidden. */
-attribute_hidden
-#endif
-__pthread_atfork (void (*prepare) (void),
- void (*parent) (void),
- void (*child) (void))
-{
- return __register_atfork (prepare, parent, child, __dso_handle);
-}
-#ifndef __pthread_atfork
-extern int pthread_atfork (void (*prepare) (void), void (*parent) (void),
- void (*child) (void)) attribute_hidden;
-weak_alias (__pthread_atfork, pthread_atfork)
-#endif
new file mode 100644
@@ -0,0 +1,2 @@
+#define PTHREAD_ATFORK_COMPAT_INTRODUCED GLIBC_2_12
+#define PTHREAD_ATFORK_COMPAT_OBSOLETED GLIBC_2_23
new file mode 100644
@@ -0,0 +1,2 @@
+#define PTHREAD_ATFORK_COMPAT_INTRODUCED GLIBC_2_0
+#define PTHREAD_ATFORK_COMPAT_OBSOLETED GLIBC_2_3
@@ -29,7 +29,7 @@ endif
ifneq (,$(filter $(subdir),htl nptl))
headers += threads.h
-routines += thrd_current thrd_equal thrd_sleep thrd_yield
+routines += thrd_current thrd_equal thrd_sleep thrd_yield pthread_atfork
libpthread-routines += thrd_create thrd_detach thrd_exit thrd_join \
call_once \
@@ -37,7 +37,8 @@ libpthread-routines += thrd_create thrd_detach thrd_exit thrd_join \
mtx_trylock mtx_unlock \
cnd_broadcast \
cnd_destroy cnd_init cnd_signal cnd_timedwait cnd_wait \
- tss_create tss_delete tss_get tss_set
+ tss_create tss_delete tss_get tss_set \
+ pthread_atfork_compat
tests += tst-cnd-basic tst-mtx-trylock tst-cnd-broadcast \
tst-cnd-timedwait tst-thrd-detach tst-mtx-basic tst-thrd-sleep \
@@ -109,6 +110,7 @@ tests += tst-cnd-basic tst-mtx-trylock tst-cnd-broadcast \
tst-unwind-thread \
tst-pt-vfork1 tst-pt-vfork2 tst-vfork1x tst-vfork2x \
+static-only-routines = pthread_atfork
# Files which must not be linked with libpthread.
tests-nolibpthread = tst-unload
similarity index 100%
rename from nptl/pthread_atfork.c
rename to sysdeps/pthread/pthread_atfork.c
similarity index 76%
rename from nptl/old_pthread_atfork.c
rename to sysdeps/pthread/pthread_atfork_compat.c
@@ -1,6 +1,6 @@
-/* Copyright (C) 2002-2021 Free Software Foundation, Inc.
+/* Compat pthread_atfork implementation.
+ Copyright (C) 2002-2021 Free Software Foundation, Inc.
This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -16,11 +16,14 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
+#include <pthread_atfork_compat.h>
#include <shlib-compat.h>
-#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_3)
+#if SHLIB_COMPAT (libpthread, PTHREAD_ATFORK_COMPAT_INTRODUCED, \
+ PTHREAD_ATFORK_COMPAT_OBSOLETED)
# define __pthread_atfork __dyn_pthread_atfork
# include "pthread_atfork.c"
# undef __pthread_atfork
-compat_symbol (libpthread, __dyn_pthread_atfork, pthread_atfork, GLIBC_2_0);
+compat_symbol (libpthread, __dyn_pthread_atfork, pthread_atfork,
+ PTHREAD_ATFORK_COMPAT_INTRODUCED);
#endif