Update.
[kopensolaris-gnu/glibc.git] / linuxthreads / tststack.c
1 /* Tests for variable stack size handling.
2    Copyright (C) 2000 Free Software Foundation, Inc.
3    Contributed by Ulrich Drepper <drepper@redhat.com>, 2000.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public License as
7    published by the Free Software Foundation; either version 2.1 of the
8    License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; see the file COPYING.LIB.  If not,
17    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18    Boston, MA 02111-1307, USA.  */
19
20 #include <pthread.h>
21 #include <stdio.h>
22 #include <unistd.h>
23
24 static void *f1 (void *);
25 static void *f2 (void *);
26
27 int
28 main (void)
29 {
30   pthread_attr_t attr;
31   pthread_t th1 = 0;
32   pthread_t th2 = 0;
33   void *res1;
34   void *res2;
35
36   pthread_attr_init (&attr);
37   if (pthread_attr_setstacksize (&attr, 70*1024) != 0)
38     {
39       puts ("invalid stack size");
40       return 1;
41     }
42
43   pthread_create (&th1, NULL, f1, NULL);
44   pthread_create (&th2, &attr, f2, NULL);
45
46   pthread_join (th1, &res1);
47   pthread_join (th2, &res2);
48
49   printf ("res1 = %p\n", res1);
50   printf ("res2 = %p\n", res2);
51
52   return res1 != (void *) 1 || res2 != (void *) 2;
53 }
54
55 static void *
56 f1 (void *parm)
57 {
58   printf ("This is `%s'\n", __FUNCTION__);
59   fflush (stdout);
60
61   return (void *) 1;
62 }
63
64 static void *
65 f2 (void *parm)
66 {
67   printf ("This is `%s'\n", __FUNCTION__);
68   fflush (stdout);
69   sleep (1);
70
71   return (void *) 2;
72 }