1 /* Test the thread attribute get and set methods.
2    Copyright (C) 2000-2022 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
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
7    License as published by the Free Software Foundation; either
8    version 2.1 of the 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;  if not, see
17    <https://www.gnu.org/licenses/>.  */
18 
19 #define _GNU_SOURCE
20 
21 #include <pthread.h>
22 #include <sched.h>
23 #include <assert.h>
24 #include <errno.h>
25 
26 int
main(int argc,char * argv[])27 main (int argc, char *argv[])
28 {
29   error_t err;
30   pthread_attr_t attr;
31 
32   int i;
33   struct sched_param sp;
34   void *p;
35   size_t sz;
36 
37   err = pthread_attr_init (&attr);
38   assert_perror (err);
39 
40   err = pthread_attr_destroy (&attr);
41   assert_perror (err);
42 
43   err = pthread_attr_init (&attr);
44   assert_perror (err);
45 
46 #define TEST1(foo, rv, v) \
47 	err = pthread_attr_get##foo (&attr, rv); \
48 	assert_perror (err); \
49 	\
50 	err = pthread_attr_set##foo (&attr, v); \
51 	assert_perror (err);
52 
53 #define TEST(foo, rv, v) TEST1(foo, rv, v)
54 
55   TEST (inheritsched, &i, i);
56   TEST (schedparam, &sp, &sp);
57   TEST (schedpolicy, &i, i);
58   TEST (scope, &i, i);
59   TEST (stackaddr, &p, p);
60   TEST (detachstate, &i, i);
61   TEST (guardsize, &sz, sz);
62   TEST (stacksize, &sz, sz);
63 
64   err = pthread_attr_getstack (&attr, &p, &sz);
65   assert_perror (err);
66 
67   err = pthread_attr_setstack (&attr, p, sz);
68   assert_perror (err);
69 
70   return 0;
71 }
72