mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-30 10:45:40 +03:00 
			
		
		
		
	This patch move the single-thread syscall optimization defintions from syscall-cancel.h to new header file single-thread.h and also move the cancellation definitions from pthreadP.h to syscall-cancel.h. The idea is just simplify the inclusion of both syscall-cancel.h and single-thread.h (without the requirement of including all pthreadP.h defintions). No semantic changes expected, checked on a build for all major ABIs. * nptl/pthreadP.h (CANCEL_ASYNC, CANCEL_RESET, LIBC_CANCEL_ASYNC, LIBC_CANCEL_RESET, __libc_enable_asynccancel, __libc_disable_asynccancel, __librt_enable_asynccancel, __libc_disable_asynccancel, __librt_enable_asynccancel, __librt_disable_asynccancel): Move to ... * sysdeps/unix/sysv/linux/sysdep-cancel.h: ... here. (SINGLE_THREAD_P, RTLD_SINGLE_THREAD_P): Move to ... * sysdeps/unix/sysv/linux/single-thread.h: ... here. * sysdeps/generic/single-thread.h: New file. * sysdeps/unix/sysdep.h: Include single-thread.h. * sysdeps/unix/sysv/linux/futex-internal.h: Include sysdep-cancel.h. * sysdeps/unix/sysv/linux/lowlevellock-futex.h: Likewise.
		
			
				
	
	
		
			68 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Single-thread optimization definitions.  Linux version.
 | |
|    Copyright (C) 2017-2019 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
 | |
|    <http://www.gnu.org/licenses/>.  */
 | |
| 
 | |
| #ifndef _SYSDEP_CANCEL_H
 | |
| #define _SYSDEP_CANCEL_H
 | |
| 
 | |
| #include <sysdep.h>
 | |
| #include <tls.h>
 | |
| #include <errno.h>
 | |
| 
 | |
| /* The two functions are in libc.so and not exported.  */
 | |
| extern int __libc_enable_asynccancel (void) attribute_hidden;
 | |
| extern void __libc_disable_asynccancel (int oldtype) attribute_hidden;
 | |
| 
 | |
| /* The two functions are in librt.so and not exported.  */
 | |
| extern int __librt_enable_asynccancel (void) attribute_hidden;
 | |
| extern void __librt_disable_asynccancel (int oldtype) attribute_hidden;
 | |
| 
 | |
| /* The two functions are in libpthread.so and not exported.  */
 | |
| extern int __pthread_enable_asynccancel (void) attribute_hidden;
 | |
| extern void __pthread_disable_asynccancel (int oldtype) attribute_hidden;
 | |
| 
 | |
| /* Set cancellation mode to asynchronous.  */
 | |
| #define CANCEL_ASYNC() \
 | |
|   __pthread_enable_asynccancel ()
 | |
| /* Reset to previous cancellation mode.  */
 | |
| #define CANCEL_RESET(oldtype) \
 | |
|   __pthread_disable_asynccancel (oldtype)
 | |
| 
 | |
| #if IS_IN (libc)
 | |
| /* Same as CANCEL_ASYNC, but for use in libc.so.  */
 | |
| # define LIBC_CANCEL_ASYNC() \
 | |
|   __libc_enable_asynccancel ()
 | |
| /* Same as CANCEL_RESET, but for use in libc.so.  */
 | |
| # define LIBC_CANCEL_RESET(oldtype) \
 | |
|   __libc_disable_asynccancel (oldtype)
 | |
| #elif IS_IN (libpthread)
 | |
| # define LIBC_CANCEL_ASYNC() CANCEL_ASYNC ()
 | |
| # define LIBC_CANCEL_RESET(val) CANCEL_RESET (val)
 | |
| #elif IS_IN (librt)
 | |
| # define LIBC_CANCEL_ASYNC() \
 | |
|   __librt_enable_asynccancel ()
 | |
| # define LIBC_CANCEL_RESET(val) \
 | |
|   __librt_disable_asynccancel (val)
 | |
| #else
 | |
| # define LIBC_CANCEL_ASYNC()	0 /* Just a dummy value.  */
 | |
| # define LIBC_CANCEL_RESET(val)	((void)(val)) /* Nothing, but evaluate it.  */
 | |
| #endif
 | |
| 
 | |
| 
 | |
| #endif
 |