(root)/
strace-6.5/
tests-mx32/
status-unfinished-threads.c
       1  /*
       2   * Check status=unfinished filtering when a non-leader thread invokes execve.
       3   *
       4   * Copyright (c) 2019 Paul Chaignon <paul.chaignon@gmail.com>
       5   * All rights reserved.
       6   *
       7   * SPDX-License-Identifier: GPL-2.0-or-later
       8   */
       9  
      10  #include "tests.h"
      11  #include "scno.h"
      12  
      13  #ifdef __NR_nanosleep
      14  
      15  # include <errno.h>
      16  # include <pthread.h>
      17  # include <stdio.h>
      18  # include <unistd.h>
      19  
      20  # include "kernel_old_timespec.h"
      21  
      22  static pid_t leader;
      23  
      24  static void *
      25  thread(void *arg)
      26  {
      27  	kernel_old_timespec_t ts = { .tv_nsec = 100000000 };
      28  	(void) syscall(__NR_nanosleep, (unsigned long) &ts, 0UL);
      29  
      30  	printf("%-5d nanosleep({tv_sec=123, tv_nsec=0},  <unfinished ...>) = ?\n"
      31  	       "%-5d +++ superseded by execve in pid %u +++\n",
      32  	       leader, leader, (int) syscall(__NR_gettid));
      33  
      34  	char *argv[] = {((char **) arg)[0], (char *) "0", NULL};
      35  	execve(argv[0], argv, NULL);
      36  	perror_msg_and_fail("execve");
      37  }
      38  
      39  int
      40  main(int ac, char **av)
      41  {
      42  	setvbuf(stdout, NULL, _IONBF, 0);
      43  	leader = getpid();
      44  
      45  	if (ac > 1) {
      46  		printf("%-5d exit_group(0) = ?\n"
      47  		       "%-5d +++ exited with 0 +++\n", leader, leader);
      48  		return 0;
      49  	}
      50  
      51  	pthread_t t;
      52  	errno = pthread_create(&t, NULL, thread, av);
      53  	if (errno)
      54  		perror_msg_and_fail("pthread_create");
      55  
      56  	kernel_old_timespec_t ts = { .tv_sec = 123 };
      57  	(void) syscall(__NR_nanosleep, (unsigned long) &ts, 0UL);
      58  
      59  	return 1;
      60  }
      61  
      62  #else
      63  
      64  SKIP_MAIN_UNDEFINED("__NR_nanosleep")
      65  
      66  #endif