mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-23 09:43:32 +08:00
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 \
|
||||
\
|
||||
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)
|
||||
|
@ -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 \
|
||||
|
@ -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
|
4
sysdeps/htl/pthread_atfork_compat.h
Normal file
4
sysdeps/htl/pthread_atfork_compat.h
Normal 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
|
4
sysdeps/nptl/pthread_atfork_compat.h
Normal file
4
sysdeps/nptl/pthread_atfork_compat.h
Normal 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
|
@ -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
|
||||
|
@ -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
|
@ -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
|
Loading…
Reference in New Issue
Block a user