2007-07-05 Jan Kratochvil <jan.kratochvil@redhat.com>
* test/leaderkill.c: New file. * test/.cvsignore, test/Makefile: Add it.
This commit is contained in:
parent
0a46388034
commit
e1e57b2840
@ -3,3 +3,4 @@ sig
|
||||
skodic
|
||||
vfork
|
||||
clone
|
||||
leaderkill
|
||||
|
@ -2,8 +2,10 @@
|
||||
# $Id$
|
||||
#
|
||||
|
||||
all: vfork fork sig skodic clone
|
||||
all: vfork fork sig skodic clone leaderkill
|
||||
|
||||
leaderkill: LDFLAGS += -pthread
|
||||
|
||||
clean distclean:
|
||||
rm -f clone vfork fork sig *.o core
|
||||
rm -f clone vfork fork sig leaderkill *.o core
|
||||
|
||||
|
59
test/leaderkill.c
Normal file
59
test/leaderkill.c
Normal file
@ -0,0 +1,59 @@
|
||||
/* Test handle_group_exit () handling of a thread leader still alive with its
|
||||
* thread child calling exit_group () and proper passing of the process exit
|
||||
* code to the process parent of this whole thread group.
|
||||
*
|
||||
* gcc -o test/leaderkill test/leaderkill.c -Wall -ggdb2 -pthread;./test/leaderkill & pid=$!;sleep 1;strace -o x -q ./strace -f -p $pid
|
||||
* It must print: write(1, "OK\n", ...
|
||||
*/
|
||||
|
||||
#include <pthread.h>
|
||||
#include <assert.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/wait.h>
|
||||
|
||||
static void *start (void *arg)
|
||||
{
|
||||
sleep (1);
|
||||
|
||||
exit (42);
|
||||
}
|
||||
|
||||
int main (void)
|
||||
{
|
||||
pthread_t thread1;
|
||||
int i;
|
||||
pid_t child, got_pid;
|
||||
int status;
|
||||
|
||||
sleep (2);
|
||||
|
||||
child = fork ();
|
||||
switch (child)
|
||||
{
|
||||
case -1:
|
||||
abort ();
|
||||
case 0:
|
||||
i = pthread_create (&thread1, NULL, start, NULL);
|
||||
assert (i == 0);
|
||||
/* Two possible testcases; the second one passed even in the older versions. */
|
||||
#if 1
|
||||
pause ();
|
||||
#else
|
||||
pthread_exit (NULL);
|
||||
#endif
|
||||
/* NOTREACHED */
|
||||
abort ();
|
||||
break;
|
||||
default:
|
||||
got_pid = waitpid (child, &status, 0);
|
||||
assert (got_pid == child);
|
||||
assert (WIFEXITED (status));
|
||||
assert (WEXITSTATUS (status) == 42);
|
||||
puts ("OK");
|
||||
exit (0);
|
||||
}
|
||||
/* NOTREACHED */
|
||||
abort ();
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user