mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-27 11:43:34 +08:00
Linux: Simplify and fix the definition of SINGLE_THREAD_P
Always use __libc_multiple_threads if beneficial, and do not assume the the dynamic loader is single-threaded. This assumption could become incorrect by accident once more code is moved from libpthread into it. The previous commit introducing the NO_SYSCALL_CANCEL_CHECKING macro enables this change. Do not hint to the compiler that multi-threaded programs are unlikely (which is not quite true anymore). Tested-by: Carlos O'Donell <carlos@redhat.com> Reviewed-by: Carlos O'Donell <carlos@redhat.com>
This commit is contained in:
parent
1c75f89613
commit
29d4d1be68
@ -32,35 +32,13 @@ extern int __libc_multiple_threads;
|
||||
libc_hidden_proto (__libc_multiple_threads)
|
||||
#endif
|
||||
|
||||
#ifdef SINGLE_THREAD_BY_GLOBAL
|
||||
# if IS_IN (libc)
|
||||
# define SINGLE_THREAD_P \
|
||||
__glibc_likely (__libc_multiple_threads == 0)
|
||||
# elif IS_IN (libpthread)
|
||||
extern int __pthread_multiple_threads;
|
||||
# define SINGLE_THREAD_P \
|
||||
__glibc_likely (__pthread_multiple_threads == 0)
|
||||
# elif IS_IN (librt)
|
||||
# define SINGLE_THREAD_P \
|
||||
__glibc_likely (THREAD_GETMEM (THREAD_SELF, \
|
||||
header.multiple_threads) == 0)
|
||||
# else
|
||||
/* For rtld, et cetera. */
|
||||
# define SINGLE_THREAD_P (1)
|
||||
# endif
|
||||
#else /* SINGLE_THREAD_BY_GLOBAL */
|
||||
# if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
|
||||
# define SINGLE_THREAD_P \
|
||||
__glibc_likely (THREAD_GETMEM (THREAD_SELF, \
|
||||
header.multiple_threads) == 0)
|
||||
# else
|
||||
/* For rtld, et cetera. */
|
||||
# define SINGLE_THREAD_P (1)
|
||||
# endif
|
||||
#endif /* SINGLE_THREAD_BY_GLOBAL */
|
||||
#if !defined SINGLE_THREAD_BY_GLOBAL || IS_IN (rtld)
|
||||
# define SINGLE_THREAD_P \
|
||||
(THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
|
||||
#else
|
||||
# define SINGLE_THREAD_P (__libc_multiple_threads == 0)
|
||||
#endif
|
||||
|
||||
#define RTLD_SINGLE_THREAD_P \
|
||||
__glibc_likely (THREAD_GETMEM (THREAD_SELF, \
|
||||
header.multiple_threads) == 0)
|
||||
#define RTLD_SINGLE_THREAD_P SINGLE_THREAD_P
|
||||
|
||||
#endif /* _SINGLE_THREAD_H */
|
||||
|
Loading…
Reference in New Issue
Block a user