mirror of
https://sourceware.org/git/glibc.git
synced 2025-12-20 01:12:17 +08:00
htl: move {,_IO_}f{,un,try}lockfile implementation into libc
This commit is contained in:
@@ -20,7 +20,7 @@ subdir := htl
|
||||
srcdir = .
|
||||
|
||||
MICROKERNEL := mach
|
||||
SYSDEPS := lockfile
|
||||
SYSDEPS :=
|
||||
|
||||
LCLHDRS :=
|
||||
|
||||
@@ -36,7 +36,6 @@ libpthread-routines := \
|
||||
pt-setname-np \
|
||||
cancellation \
|
||||
herrno \
|
||||
$(SYSDEPS) \
|
||||
# libpthread-routine
|
||||
|
||||
headers := \
|
||||
@@ -220,8 +219,6 @@ install-lib-ldscripts := libpthread_syms.a
|
||||
|
||||
include ../Makeconfig
|
||||
|
||||
CFLAGS-lockfile.c = -D_IO_MTSAFE_IO
|
||||
|
||||
all: # Make this the default target; it will be defined in Rules.
|
||||
|
||||
subdir_install: $(inst_libdir)/libpthread2.a $(inst_libdir)/libpthread_syms.a
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
libc {
|
||||
|
||||
GLIBC_2.12 {
|
||||
flockfile; ftrylockfile; funlockfile;
|
||||
pthread_self;
|
||||
__pthread_get_cleanup_stack;
|
||||
__pthread_key_create;
|
||||
@@ -313,12 +314,9 @@ libc {
|
||||
|
||||
libpthread {
|
||||
GLIBC_2.2.6 {
|
||||
_IO_flockfile; _IO_ftrylockfile; _IO_funlockfile;
|
||||
__errno_location; __h_errno_location;
|
||||
}
|
||||
GLIBC_2.12 {
|
||||
flockfile; ftrylockfile; funlockfile;
|
||||
|
||||
pthread_atfork;
|
||||
|
||||
pthread_create;
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
/* lockfile - Handle locking and unlocking of streams. Hurd pthread version.
|
||||
Copyright (C) 2000-2025 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> /* Must come before <stdio.h>! */
|
||||
#include <stdio.h>
|
||||
|
||||
#undef _IO_flockfile
|
||||
#undef _IO_funlockfile
|
||||
#undef _IO_ftrylockfile
|
||||
|
||||
void
|
||||
_IO_flockfile (FILE *fp)
|
||||
{
|
||||
_IO_lock_lock (*fp->_lock);
|
||||
}
|
||||
|
||||
void
|
||||
_IO_funlockfile (FILE *fp)
|
||||
{
|
||||
_IO_lock_unlock (*fp->_lock);
|
||||
}
|
||||
|
||||
int
|
||||
_IO_ftrylockfile (FILE *fp)
|
||||
{
|
||||
return __libc_lock_trylock_recursive (*fp->_lock);
|
||||
}
|
||||
|
||||
#undef flockfile
|
||||
#undef funlockfile
|
||||
#undef ftrylockfile
|
||||
|
||||
void flockfile (FILE *)
|
||||
__attribute__ ((weak, alias ("_IO_flockfile")));
|
||||
void funlockfile (FILE *)
|
||||
__attribute__ ((weak, alias ("_IO_funlockfile")));
|
||||
int ftrylockfile (FILE *)
|
||||
__attribute__ ((weak, alias ("_IO_ftrylockfile")));
|
||||
@@ -28,9 +28,6 @@
|
||||
|
||||
#if IS_IN (libpthread)
|
||||
static const struct pthread_functions pthread_functions = {
|
||||
.ptr__IO_flockfile = _IO_flockfile,
|
||||
.ptr__IO_funlockfile = _IO_funlockfile,
|
||||
.ptr__IO_ftrylockfile = _IO_ftrylockfile,
|
||||
};
|
||||
#endif /* IS_IN (libpthread) */
|
||||
|
||||
|
||||
@@ -206,10 +206,12 @@ _Noreturn void __libc_message_wrapper (const char *vmaname,
|
||||
__libc_message_wrapper (__libc_assert_vma_name, __VA_ARGS__)
|
||||
|
||||
/* Acquire ownership of STREAM. */
|
||||
extern void __flockfile (FILE *__stream) attribute_hidden;
|
||||
extern void __flockfile (FILE *__stream);
|
||||
libc_hidden_proto (__flockfile)
|
||||
|
||||
/* Relinquish the ownership granted for STREAM. */
|
||||
extern void __funlockfile (FILE *__stream) attribute_hidden;
|
||||
extern void __funlockfile (FILE *__stream);
|
||||
libc_hidden_proto (__funlockfile)
|
||||
|
||||
/* Try to acquire ownership of STREAM but do not block if it is not
|
||||
possible. */
|
||||
|
||||
@@ -24,5 +24,6 @@ __flockfile (FILE *stream)
|
||||
{
|
||||
_IO_lock_lock (*stream->_lock);
|
||||
}
|
||||
libc_hidden_def(__flockfile)
|
||||
weak_alias (__flockfile, flockfile);
|
||||
weak_alias (__flockfile, _IO_flockfile)
|
||||
|
||||
@@ -25,5 +25,6 @@ __funlockfile (FILE *stream)
|
||||
{
|
||||
_IO_lock_unlock (*stream->_lock);
|
||||
}
|
||||
libc_hidden_def(__funlockfile)
|
||||
weak_alias (__funlockfile, _IO_funlockfile)
|
||||
weak_alias (__funlockfile, funlockfile);
|
||||
|
||||
@@ -17,15 +17,21 @@
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <libc-lockP.h>
|
||||
#include <stdio-lock.h>
|
||||
|
||||
|
||||
void
|
||||
__flockfile (FILE *stream)
|
||||
{
|
||||
#ifdef SHARED
|
||||
__libc_ptf_call (_IO_flockfile, (stream), 0);
|
||||
#endif
|
||||
_IO_lock_lock (*stream->_lock);
|
||||
}
|
||||
weak_alias (__flockfile, _IO_flockfile)
|
||||
weak_alias (__flockfile, flockfile)
|
||||
libc_hidden_def(__flockfile)
|
||||
weak_alias (__flockfile, _IO_flockfile);
|
||||
#if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_2_6, GLIBC_2_12)
|
||||
versioned_symbol (libc, __flockfile, flockfile, GLIBC_2_0);
|
||||
# if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_12, GLIBC_2_43)
|
||||
compat_symbol (libpthread, __flockfile, flockfile, GLIBC_2_12);
|
||||
# endif
|
||||
#else
|
||||
weak_alias (__flockfile, flockfile);
|
||||
#endif
|
||||
|
||||
@@ -17,17 +17,20 @@
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <libc-lockP.h>
|
||||
#include <stdio-lock.h>
|
||||
|
||||
|
||||
int
|
||||
__ftrylockfile (FILE *stream)
|
||||
{
|
||||
#ifdef SHARED
|
||||
return __libc_ptf_call (_IO_ftrylockfile, (stream), 0);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
return _IO_lock_trylock (*stream->_lock);
|
||||
}
|
||||
weak_alias (__ftrylockfile, _IO_ftrylockfile)
|
||||
weak_alias (__ftrylockfile, ftrylockfile)
|
||||
weak_alias (__ftrylockfile, _IO_ftrylockfile);
|
||||
#if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_2_6, GLIBC_2_12)
|
||||
versioned_symbol (libc, __ftrylockfile, ftrylockfile, GLIBC_2_0);
|
||||
# if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_12, GLIBC_2_43)
|
||||
compat_symbol (libpthread, __ftrylockfile, ftrylockfile, GLIBC_2_12);
|
||||
# endif
|
||||
#else
|
||||
weak_alias (__ftrylockfile, ftrylockfile);
|
||||
#endif
|
||||
|
||||
@@ -23,9 +23,15 @@
|
||||
void
|
||||
__funlockfile (FILE *stream)
|
||||
{
|
||||
#ifdef SHARED
|
||||
__libc_ptf_call (_IO_funlockfile, (stream), 0);
|
||||
#endif
|
||||
_IO_lock_unlock (*stream->_lock);
|
||||
}
|
||||
weak_alias (__funlockfile, _IO_funlockfile)
|
||||
weak_alias (__funlockfile, funlockfile)
|
||||
libc_hidden_def(__funlockfile)
|
||||
weak_alias (__funlockfile, _IO_funlockfile);
|
||||
#if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_2_6, GLIBC_2_12)
|
||||
versioned_symbol (libc, __funlockfile, funlockfile, GLIBC_2_0);
|
||||
# if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_12, GLIBC_2_43)
|
||||
compat_symbol (libpthread, __funlockfile, funlockfile, GLIBC_2_12);
|
||||
# endif
|
||||
#else
|
||||
weak_alias (__funlockfile, funlockfile);
|
||||
#endif
|
||||
|
||||
@@ -26,9 +26,6 @@
|
||||
so if possible avoid breaking it and append new hooks to the end. */
|
||||
struct pthread_functions
|
||||
{
|
||||
void (*ptr__IO_flockfile) (FILE *);
|
||||
void (*ptr__IO_funlockfile) (FILE *);
|
||||
int (*ptr__IO_ftrylockfile) (FILE *);
|
||||
};
|
||||
|
||||
/* Variable in libc.so. */
|
||||
|
||||
@@ -33,6 +33,9 @@ GLIBC_2.12 __pthread_key_create F
|
||||
GLIBC_2.12 __pthread_kill F
|
||||
GLIBC_2.12 __pthread_mutex_transfer_np F
|
||||
GLIBC_2.12 __pthread_self F
|
||||
GLIBC_2.12 flockfile F
|
||||
GLIBC_2.12 ftrylockfile F
|
||||
GLIBC_2.12 funlockfile F
|
||||
GLIBC_2.12 pthread_attr_destroy F
|
||||
GLIBC_2.12 pthread_attr_getdetachstate F
|
||||
GLIBC_2.12 pthread_attr_getguardsize F
|
||||
|
||||
@@ -4,9 +4,6 @@ GLIBC_2.12 __pthread_spin_lock F
|
||||
GLIBC_2.12 __pthread_spin_trylock F
|
||||
GLIBC_2.12 __pthread_spin_unlock F
|
||||
GLIBC_2.12 _pthread_spin_lock F
|
||||
GLIBC_2.12 flockfile F
|
||||
GLIBC_2.12 ftrylockfile F
|
||||
GLIBC_2.12 funlockfile F
|
||||
GLIBC_2.12 pthread_atfork F
|
||||
GLIBC_2.12 pthread_create F
|
||||
GLIBC_2.12 pthread_spin_destroy F
|
||||
@@ -14,9 +11,6 @@ GLIBC_2.12 pthread_spin_init F
|
||||
GLIBC_2.12 pthread_spin_lock F
|
||||
GLIBC_2.12 pthread_spin_trylock F
|
||||
GLIBC_2.12 pthread_spin_unlock F
|
||||
GLIBC_2.2.6 _IO_flockfile F
|
||||
GLIBC_2.2.6 _IO_ftrylockfile F
|
||||
GLIBC_2.2.6 _IO_funlockfile F
|
||||
GLIBC_2.2.6 __errno_location F
|
||||
GLIBC_2.2.6 __h_errno_location F
|
||||
GLIBC_2.21 pthread_hurd_cond_timedwait_np F
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
GLIBC_2.38 _IO_flockfile F
|
||||
GLIBC_2.38 _IO_ftrylockfile F
|
||||
GLIBC_2.38 _IO_funlockfile F
|
||||
GLIBC_2.38 __errno_location F
|
||||
GLIBC_2.38 __h_errno_location F
|
||||
GLIBC_2.38 __pthread_spin_destroy F
|
||||
@@ -16,9 +13,6 @@ GLIBC_2.38 cnd_init F
|
||||
GLIBC_2.38 cnd_signal F
|
||||
GLIBC_2.38 cnd_timedwait F
|
||||
GLIBC_2.38 cnd_wait F
|
||||
GLIBC_2.38 flockfile F
|
||||
GLIBC_2.38 ftrylockfile F
|
||||
GLIBC_2.38 funlockfile F
|
||||
GLIBC_2.38 mtx_destroy F
|
||||
GLIBC_2.38 mtx_init F
|
||||
GLIBC_2.38 mtx_lock F
|
||||
|
||||
Reference in New Issue
Block a user