Consolidate pthread_atfork

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 + exception.

Checked on x86_64-linux-gnu, i686-linux-gnu, and with a build for
i686-gnu.
This commit is contained in:
Adhemerval Zanella 2021-01-20 14:06:56 -03:00
parent d0c4083386
commit 9f70985569
9 changed files with 18 additions and 75 deletions

View File

@ -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 \
\
@ -165,9 +164,8 @@ headers := \
distribute :=
routines := forward libc_pthread_init alloca_cutoff pt-atfork htlfreeres
routines := forward libc_pthread_init alloca_cutoff htlfreeres
shared-only-routines = forward
static-only-routines = pt-atfork
extra-libs := libpthread
extra-libs-others := $(extra-libs)

View File

@ -52,7 +52,6 @@ routines = \
nptl_nthreads \
nptl_setxid \
nptlfreeres \
old_pthread_atfork \
old_pthread_cond_broadcast \
old_pthread_cond_destroy \
old_pthread_cond_init \

View File

@ -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

View File

@ -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 <dso_handle.h>
#include <register-atfork.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

View File

@ -0,0 +1,4 @@
/* The compat version for the dynamic pthread_atfork provided by libpthread,
before supported __dso_handle was added. */
#define PTHREAD_ATFORK_COMPAT_INTRODUCED GLIBC_2_12
#define PTHREAD_ATFORK_COMPAT_OBSOLETED GLIBC_2_23

View File

@ -0,0 +1,4 @@
/* The compat versions for the dynamic pthread_atfork provided by libpthread,
before supported __dso_handle was added. */
#define PTHREAD_ATFORK_COMPAT_INTRODUCED GLIBC_2_0
#define PTHREAD_ATFORK_COMPAT_OBSOLETED GLIBC_2_3

View File

@ -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-var) += \
call_once \
@ -45,6 +45,7 @@ $(libpthread-routines-var) += \
mtx_timedlock \
mtx_trylock \
mtx_unlock \
pthread_atfork_compat \
thrd_create \
thrd_detach \
thrd_exit \
@ -134,6 +135,7 @@ tests-time64 := \
tst-sem5-time64 \
tst-thrd-sleep-time64 \
static-only-routines = pthread_atfork
# Files which must not be linked with libpthread.
tests-nolibpthread += tst-unload

View File

@ -36,6 +36,7 @@
#include "pthreadP.h"
#include <register-atfork.h>
#include <dso_handle.h>
#include <register-atfork.h>
/* Hide the symbol so that no definition but the one locally in the

View File

@ -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,13 @@
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 OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_3)
# 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