mirror of git://sourceware.org/git/glibc.git
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:
parent
d0c4083386
commit
9f70985569
|
@ -121,7 +121,6 @@ libpthread-routines := pt-attr pt-attr-destroy pt-attr-getdetachstate \
|
||||||
pt-sigstate-destroy \
|
pt-sigstate-destroy \
|
||||||
pt-sigstate \
|
pt-sigstate \
|
||||||
\
|
\
|
||||||
old_pt-atfork \
|
|
||||||
pt-kill \
|
pt-kill \
|
||||||
pt-getcpuclockid \
|
pt-getcpuclockid \
|
||||||
\
|
\
|
||||||
|
@ -165,9 +164,8 @@ headers := \
|
||||||
|
|
||||||
distribute :=
|
distribute :=
|
||||||
|
|
||||||
routines := forward libc_pthread_init alloca_cutoff pt-atfork htlfreeres
|
routines := forward libc_pthread_init alloca_cutoff htlfreeres
|
||||||
shared-only-routines = forward
|
shared-only-routines = forward
|
||||||
static-only-routines = pt-atfork
|
|
||||||
|
|
||||||
extra-libs := libpthread
|
extra-libs := libpthread
|
||||||
extra-libs-others := $(extra-libs)
|
extra-libs-others := $(extra-libs)
|
||||||
|
|
|
@ -52,7 +52,6 @@ routines = \
|
||||||
nptl_nthreads \
|
nptl_nthreads \
|
||||||
nptl_setxid \
|
nptl_setxid \
|
||||||
nptlfreeres \
|
nptlfreeres \
|
||||||
old_pthread_atfork \
|
|
||||||
old_pthread_cond_broadcast \
|
old_pthread_cond_broadcast \
|
||||||
old_pthread_cond_destroy \
|
old_pthread_cond_destroy \
|
||||||
old_pthread_cond_init \
|
old_pthread_cond_init \
|
||||||
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -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
|
|
@ -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
|
|
@ -29,7 +29,7 @@ endif
|
||||||
ifneq (,$(filter $(subdir),htl nptl))
|
ifneq (,$(filter $(subdir),htl nptl))
|
||||||
headers += threads.h
|
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) += \
|
$(libpthread-routines-var) += \
|
||||||
call_once \
|
call_once \
|
||||||
|
@ -45,6 +45,7 @@ $(libpthread-routines-var) += \
|
||||||
mtx_timedlock \
|
mtx_timedlock \
|
||||||
mtx_trylock \
|
mtx_trylock \
|
||||||
mtx_unlock \
|
mtx_unlock \
|
||||||
|
pthread_atfork_compat \
|
||||||
thrd_create \
|
thrd_create \
|
||||||
thrd_detach \
|
thrd_detach \
|
||||||
thrd_exit \
|
thrd_exit \
|
||||||
|
@ -134,6 +135,7 @@ tests-time64 := \
|
||||||
tst-sem5-time64 \
|
tst-sem5-time64 \
|
||||||
tst-thrd-sleep-time64 \
|
tst-thrd-sleep-time64 \
|
||||||
|
|
||||||
|
static-only-routines = pthread_atfork
|
||||||
|
|
||||||
# Files which must not be linked with libpthread.
|
# Files which must not be linked with libpthread.
|
||||||
tests-nolibpthread += tst-unload
|
tests-nolibpthread += tst-unload
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include "pthreadP.h"
|
#include "pthreadP.h"
|
||||||
#include <register-atfork.h>
|
#include <register-atfork.h>
|
||||||
#include <dso_handle.h>
|
#include <dso_handle.h>
|
||||||
|
#include <register-atfork.h>
|
||||||
|
|
||||||
|
|
||||||
/* Hide the symbol so that no definition but the one locally in the
|
/* Hide the symbol so that no definition but the one locally in the
|
|
@ -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.
|
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
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU Lesser General Public
|
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
|
License along with the GNU C Library; if not, see
|
||||||
<https://www.gnu.org/licenses/>. */
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <pthread_atfork_compat.h>
|
||||||
#include <shlib-compat.h>
|
#include <shlib-compat.h>
|
||||||
|
|
||||||
#if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_3)
|
#if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_3)
|
||||||
# define __pthread_atfork __dyn_pthread_atfork
|
# define __pthread_atfork __dyn_pthread_atfork
|
||||||
# include "pthread_atfork.c"
|
# include "pthread_atfork.c"
|
||||||
# undef __pthread_atfork
|
# 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
|
#endif
|
Loading…
Reference in New Issue