mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-30 22:43:12 +03: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:
@ -32,35 +32,13 @@ extern int __libc_multiple_threads;
|
|||||||
libc_hidden_proto (__libc_multiple_threads)
|
libc_hidden_proto (__libc_multiple_threads)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef SINGLE_THREAD_BY_GLOBAL
|
#if !defined SINGLE_THREAD_BY_GLOBAL || IS_IN (rtld)
|
||||||
# if IS_IN (libc)
|
# define SINGLE_THREAD_P \
|
||||||
# define SINGLE_THREAD_P \
|
(THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
|
||||||
__glibc_likely (__libc_multiple_threads == 0)
|
#else
|
||||||
# elif IS_IN (libpthread)
|
# define SINGLE_THREAD_P (__libc_multiple_threads == 0)
|
||||||
extern int __pthread_multiple_threads;
|
#endif
|
||||||
# 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 */
|
|
||||||
|
|
||||||
#define RTLD_SINGLE_THREAD_P \
|
#define RTLD_SINGLE_THREAD_P SINGLE_THREAD_P
|
||||||
__glibc_likely (THREAD_GETMEM (THREAD_SELF, \
|
|
||||||
header.multiple_threads) == 0)
|
|
||||||
|
|
||||||
#endif /* _SINGLE_THREAD_H */
|
#endif /* _SINGLE_THREAD_H */
|
||||||
|
Reference in New Issue
Block a user