~ubuntu-branches/ubuntu/natty/eglibc/natty-security

1 by Aurelien Jarno
Import upstream version 2.9
1
/* Tests for variable stack size handling.
2
   Copyright (C) 2000, 2003 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
#include <limits.h>
24
#include <sys/param.h>
25
26
static void *f1 (void *);
27
static void *f2 (void *);
28
29
int
30
main (void)
31
{
32
  pthread_attr_t attr;
33
  pthread_t th1 = 0;
34
  pthread_t th2 = 0;
35
  void *res1;
36
  void *res2;
37
38
  pthread_attr_init (&attr);
39
  if (pthread_attr_setstacksize (&attr, MAX (70*1024, PTHREAD_STACK_MIN)) != 0)
40
    {
41
      puts ("invalid stack size");
42
      return 1;
43
    }
44
45
  pthread_create (&th1, NULL, f1, NULL);
46
  pthread_create (&th2, &attr, f2, NULL);
47
48
  pthread_join (th1, &res1);
49
  pthread_join (th2, &res2);
50
51
  printf ("res1 = %p\n", res1);
52
  printf ("res2 = %p\n", res2);
53
54
  return res1 != (void *) 1 || res2 != (void *) 2;
55
}
56
57
static void *
58
f1 (void *parm)
59
{
60
  printf ("This is `%s'\n", __FUNCTION__);
61
  fflush (stdout);
62
63
  return (void *) 1;
64
}
65
66
static void *
67
f2 (void *parm)
68
{
69
  printf ("This is `%s'\n", __FUNCTION__);
70
  fflush (stdout);
71
  sleep (1);
72
73
  return (void *) 2;
74
}