mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-30 10:45:40 +03:00 
			
		
		
		
	Checked on x86_64-linux-gnu. * nptl/tst-cancel4-common.c: Use libsupport. * nptl/tst-cancel4-common.h: Likewise. * nptl/tst-cancel4.c (tf_read): Likewise. (tf_readv): Likewise. (tf_write): Likewise. (tf_writev): Likewise. (tf_sleep): Likewise. (tf_usleep): Likewise. (tf_nanosleep): Likewise. (tf_select): Likewise. (tf_pselect): Likewise. (tf_poll): Likewise. (tf_ppoll): Likewise. (tf_wait): Likewise. (tf_waitpid): Likewise. (tf_waitid): Likewise. (tf_sigpause): Likewise. (tf_sigsuspend): Likewise. (tf_sigwait): Likewise. (tf_sigwaitinfo): Likewise. (tf_sigtimedwait): Likewise. (tf_pause): Likewise. (tf_accept): Likewise. (tf_send): Likewise. (tf_recv): Likewise. (tf_recvfrom): Likewise. (tf_recvmsg): Likewise. (tf_open): Likewise. (tf_close): Likewise. (tf_pread): Likewise. (tf_pwrite): Likewise. (tf_preadv): Likewise. (tf_pwritev): Likewise. (tf_fsync): Likewise. (tf_fdatasync): Likewise. (tf_msync): Likewise. (tf_sendto): Likewise. (tf_sendmsg): Likewise. (tf_creat): Likewise. (tf_connect): Likewise. (tf_tcdrain): Likewise. (tf_msgrcv): Likewise. (tf_msgsnd): Likewise. * nptl/tst-cancel4_1.c (tf_sendmmsg): Likewise. * nptl/tst-cancel4_2.c (tf_recvmmsg): Likewise.
		
			
				
	
	
		
			98 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Common definition for tst-cancel4_* tests.
 | |
| 
 | |
|    Copyright (C) 2016-2017 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/>.  */
 | |
| 
 | |
| #include <pthread.h>
 | |
| 
 | |
| #include <support/check.h>
 | |
| #include <support/xthread.h>
 | |
| #include <support/xunistd.h>
 | |
| 
 | |
| /* Pipe descriptors.  */
 | |
| static int fds[2];
 | |
| 
 | |
| /* Temporary file descriptor, to be closed after each round.  */
 | |
| static int tempfd = -1;
 | |
| static int tempfd2 = -1;
 | |
| /* Name of temporary file to be removed after each round.  */
 | |
| static char *tempfname;
 | |
| /* Temporary message queue.  */
 | |
| static int tempmsg = -1;
 | |
| 
 | |
| /* Often used barrier for two threads.  */
 | |
| static pthread_barrier_t b2;
 | |
| 
 | |
| /* The WRITE_BUFFER_SIZE value needs to be chosen such that if we set
 | |
|    the socket send buffer size to '1', a write of this size on that
 | |
|    socket will block.
 | |
| 
 | |
|    The Linux kernel imposes a minimum send socket buffer size which
 | |
|    has changed over the years.  As of Linux 3.10 the value is:
 | |
| 
 | |
|      2 * (2048 + SKB_DATA_ALIGN(sizeof(struct sk_buff)))
 | |
| 
 | |
|    which is attempting to make sure that with standard MTUs,
 | |
|    TCP can always queue up at least 2 full sized packets.
 | |
| 
 | |
|    Furthermore, there is logic in the socket send paths that
 | |
|    will allow one more packet (of any size) to be queued up as
 | |
|    long as some socket buffer space remains.   Blocking only
 | |
|    occurs when we try to queue up a new packet and the send
 | |
|    buffer space has already been fully consumed.
 | |
| 
 | |
|    Therefore we must set this value to the largest possible value of
 | |
|    the formula above (and since it depends upon the size of "struct
 | |
|    sk_buff", it is dependent upon machine word size etc.) plus some
 | |
|    slack space.  */
 | |
| 
 | |
| #define WRITE_BUFFER_SIZE 16384
 | |
| 
 | |
| /* Cleanup handling test.  */
 | |
| static int cl_called;
 | |
| 
 | |
| static void
 | |
| cl (void *arg)
 | |
| {
 | |
|   ++cl_called;
 | |
| }
 | |
| 
 | |
| /* Named pipe used to check for blocking open.  It should be closed
 | |
|    after the cancellation handling.  */
 | |
| static char fifoname[] = "/tmp/tst-cancel4-fifo-XXXXXX";
 | |
| static int fifofd;
 | |
| 
 | |
| static void
 | |
| __attribute__ ((used))
 | |
| cl_fifo (void *arg)
 | |
| {
 | |
|   ++cl_called;
 | |
| 
 | |
|   unlink (fifoname);
 | |
|   close (fifofd);
 | |
|   fifofd = -1;
 | |
| }
 | |
| 
 | |
| struct cancel_tests
 | |
| {
 | |
|   const char *name;
 | |
|   void *(*tf) (void *);
 | |
|   int nb;
 | |
|   int only_early;
 | |
| };
 | |
| #define ADD_TEST(name, nbar, early) { #name, tf_##name, nbar, early }
 |