source: rtems/c/src/tests/psxtests/psx07/init.c @ 39b3d87

4.104.114.84.95
Last change on this file since 39b3d87 was 39b3d87, checked in by Joel Sherrill <joel.sherrill@…>, on 04/27/98 at 13:44:54

Reset the pthread attributes structure so the proper error would be
generated.

  • Property mode set to 100644
File size: 16.7 KB
Line 
1/*
2 *  COPYRIGHT (c) 1989-1998.
3 *  On-Line Applications Research Corporation (OAR).
4 *  Copyright assigned to U.S. Government, 1994.
5 *
6 *  The license and distribution terms for this file may be
7 *  found in the file LICENSE in this distribution or at
8 *  http://www.OARcorp.com/rtems/license.html.
9 *
10 *  $Id$
11 */
12
13#define CONFIGURE_INIT
14#include "system.h"
15#include <errno.h>
16
17void print_schedparam(
18  char               *prefix,
19  struct sched_param *schedparam
20)
21{
22  printf( "%ssched priority      = %d\n", prefix, schedparam->sched_priority );
23#if defined(_POSIX_SPORADIC_SERVER)
24  printf( "%sss_low_priority     = %d\n", prefix, schedparam->ss_low_priority );
25  printf( "%sss_replenish_period = (%ld, %ld)\n", prefix,
26     schedparam->ss_replenish_period.tv_sec,
27     schedparam->ss_replenish_period.tv_nsec );
28  printf( "%sss_initial_budget = (%ld, %ld)\n", prefix,
29     schedparam->ss_initial_budget.tv_sec,
30     schedparam->ss_initial_budget.tv_nsec );
31#else
32  printf( "%s_POSIX_SPORADIC_SERVER is not defined\n" );
33#endif
34}
35 
36extern rtems_configuration_table BSP_Configuration;
37
38void *POSIX_Init(
39  void *argument
40)
41{
42  int                 status;
43  int                 scope;
44  int                 inheritsched;
45  int                 schedpolicy;
46  size_t              stacksize;
47  void               *stackaddr;
48  int                 detachstate;
49  struct sched_param  schedparam;
50  pthread_attr_t      attr;
51  pthread_attr_t      destroyed_attr;
52
53  puts( "\n\n*** POSIX TEST 7 ***" );
54
55  /* set the time of day, and print our buffer in multiple ways */
56
57  set_time( TM_FRIDAY, TM_MAY, 24, 96, 11, 5, 0 );
58
59  /* get id of this thread */
60
61  Init_id = pthread_self();
62  printf( "Init's ID is 0x%08x\n", Init_id );
63 
64  /* exercise init and destroy */
65
66  puts( "Init: pthread_attr_init - EINVAL (NULL attr)" );
67  status = pthread_attr_init( NULL );
68  assert( status == EINVAL );
69
70  puts( "Init: pthread_attr_init - SUCCESSFUL" );
71  status = pthread_attr_init( &attr );
72  assert( !status );
73
74  puts( "Init: initialize and destroy an attribute - SUCCESSFUL" );
75  status = pthread_attr_init( &destroyed_attr );
76  assert( !status );
77
78  status = pthread_attr_destroy( &destroyed_attr );
79  assert( !status );
80
81  puts( "Init: pthread_attr_destroy - EINVAL (NULL attr)" );
82  status = pthread_attr_destroy( NULL );
83  assert( status == EINVAL );
84
85  puts( "Init: pthread_attr_destroy - EINVAL (not initialized)" );
86  status = pthread_attr_destroy( &destroyed_attr );
87  assert( status == EINVAL );
88
89  /* check some errors in pthread_create */
90
91  puts( "Init: pthread_create - EINVAL (attr not initialized)" );
92  status = pthread_create( &Task_id, &destroyed_attr, Task_1, NULL );
93  assert( status == EINVAL );
94
95  /* junk stack address */
96  status = pthread_attr_setstackaddr( &attr, (void *)&schedparam );
97  assert( !status );
98 
99  /* must go around pthread_attr_setstacksize to set a bad stack size */
100  attr.stacksize = 0;
101 
102  puts( "Init: pthread_create - EINVAL (stacksize too small)" );
103  status = pthread_create( &Task_id, &attr, Task_1, NULL );
104  assert( status == EINVAL );
105
106  /* reset all the fields */
107  status = pthread_attr_init( &attr );
108  assert( !status );
109
110  attr.stacksize = BSP_Configuration.work_space_size * 10;
111  puts( "Init: pthread_create - EAGAIN (stacksize too large)" );
112  status = pthread_create( &Task_id, &attr, Task_1, NULL );
113  assert( status == EAGAIN );
114
115  status = pthread_attr_init( &attr );
116  assert( !status );
117
118  /* must go around pthread_attr_set routines to set a bad value */
119  attr.inheritsched = -1;
120 
121  puts( "Init: pthread_create - EINVAL (invalid inherit scheduler)" );
122  status = pthread_create( &Task_id, &attr, Task_1, NULL );
123  assert( status == EINVAL );
124
125  /* check out the error case for system scope not supported */
126
127  status = pthread_attr_init( &attr );
128  assert( !status );
129
130  /* must go around pthread_attr_set routines to set a bad value */
131  attr.contentionscope = PTHREAD_SCOPE_SYSTEM;
132
133  puts( "Init: pthread_create - ENOTSUP (unsupported system contention scope)" );
134  status = pthread_create( &Task_id, &attr, Task_1, NULL );
135  assert( status == ENOTSUP );
136
137  status = pthread_attr_init( &attr );
138  assert( !status );
139
140  /* now check out pthread_create for inherit scheduler */
141
142  status = pthread_attr_setinheritsched( &attr, PTHREAD_INHERIT_SCHED );
143  assert( !status );
144 
145  puts( "Init: pthread_create - SUCCESSFUL (inherit scheduler)" );
146  status = pthread_create( &Task_id, &attr, Task_1, NULL );
147  assert( !status );
148
149  status = pthread_join( Task_id, NULL );
150  assert( !status );
151
152    /* switch to Task_1 */
153
154  /* exercise get and set scope */
155
156  empty_line();
157
158  status = pthread_attr_init( &attr );
159  assert( !status );
160
161  puts( "Init: pthread_attr_setscope - EINVAL (NULL attr)" );
162  status = pthread_attr_setscope( NULL, PTHREAD_SCOPE_PROCESS );
163  assert( status == EINVAL );
164
165  puts( "Init: pthread_attr_setscope - ENOTSUP" );
166  status = pthread_attr_setscope( &attr, PTHREAD_SCOPE_SYSTEM );
167  assert( status == ENOTSUP );
168
169  puts( "Init: pthread_attr_setscope - EINVAL (not initialized attr)" );
170  status = pthread_attr_setscope( &destroyed_attr, PTHREAD_SCOPE_PROCESS );
171  assert( status == EINVAL );
172
173  puts( "Init: pthread_attr_setscope - EINVAL (invalid scope)" );
174  status = pthread_attr_setscope( &attr, -1 );
175  assert( status == EINVAL );
176
177  puts( "Init: pthread_attr_setscope - SUCCESSFUL" );
178  status = pthread_attr_setscope( &attr, PTHREAD_SCOPE_PROCESS );
179  assert( !status );
180 
181  puts( "Init: pthread_attr_getscope - EINVAL (NULL attr)" );
182  status = pthread_attr_getscope( NULL, &scope );
183  assert( status == EINVAL );
184 
185  puts( "Init: pthread_attr_getscope - EINVAL (NULL scope)" );
186  status = pthread_attr_getscope( &attr, NULL );
187  assert( status == EINVAL );
188 
189  puts( "Init: pthread_attr_getscope - EINVAL (not initialized attr)" );
190  status = pthread_attr_getscope( &destroyed_attr, &scope );
191  assert( status == EINVAL );
192 
193  puts( "Init: pthread_attr_getscope - SUCCESSFUL" );
194  status = pthread_attr_getscope( &attr, &scope );
195  assert( !status );
196  printf( "Init: current scope attribute = %d\n", scope );
197
198  /* exercise get and set inherit scheduler */
199
200  empty_line();
201
202  puts( "Init: pthread_attr_setinheritsched - EINVAL (NULL attr)" );
203  status = pthread_attr_setinheritsched( NULL, PTHREAD_INHERIT_SCHED );
204  assert( status == EINVAL );
205 
206  puts( "Init: pthread_attr_setinheritsched - EINVAL (not initialized attr)" );
207  status =
208     pthread_attr_setinheritsched( &destroyed_attr, PTHREAD_INHERIT_SCHED );
209  assert( status == EINVAL );
210 
211  puts( "Init: pthread_attr_setinheritsched - ENOTSUP (invalid inheritsched)" );
212  status = pthread_attr_setinheritsched( &attr, -1 );
213  assert( status == ENOTSUP );
214 
215  puts( "Init: pthread_attr_setinheritsched - SUCCESSFUL" );
216  status = pthread_attr_setinheritsched( &attr, PTHREAD_INHERIT_SCHED );
217  assert( !status );
218 
219  puts( "Init: pthread_attr_getinheritsched - EINVAL (NULL attr)" );
220  status = pthread_attr_getinheritsched( NULL, &inheritsched );
221  assert( status == EINVAL );
222 
223  puts( "Init: pthread_attr_getinheritsched - EINVAL (NULL inheritsched)" );
224  status = pthread_attr_getinheritsched( &attr, NULL );
225  assert( status == EINVAL );
226 
227  puts( "Init: pthread_attr_getinheritsched - EINVAL (not initialized attr)" );
228  status = pthread_attr_getinheritsched( &destroyed_attr, &inheritsched );
229  assert( status == EINVAL );
230 
231  puts( "Init: pthread_attr_getinheritsched - SUCCESSFUL" );
232  status = pthread_attr_getinheritsched( &attr, &inheritsched );
233  assert( !status );
234  printf( "Init: current inherit scheduler attribute = %d\n", inheritsched );
235
236  /* exercise get and set inherit scheduler */
237 
238  empty_line();
239 
240  puts( "Init: pthread_attr_setschedpolicy - EINVAL (NULL attr)" );
241  status = pthread_attr_setschedpolicy( NULL, SCHED_FIFO );
242  assert( status == EINVAL );
243 
244  puts( "Init: pthread_attr_setschedpolicy - EINVAL (not initialized attr)" );
245  status =
246     pthread_attr_setschedpolicy( &destroyed_attr, SCHED_OTHER );
247  assert( status == EINVAL );
248 
249  puts( "Init: pthread_attr_setschedpolicy - ENOTSUP (invalid schedpolicy)" );
250  status = pthread_attr_setschedpolicy( &attr, -1 );
251  assert( status == ENOTSUP );
252 
253  puts( "Init: pthread_attr_setschedpolicy - SUCCESSFUL" );
254  status = pthread_attr_setschedpolicy( &attr, SCHED_RR );
255  assert( !status );
256 
257  puts( "Init: pthread_attr_getschedpolicy - EINVAL (NULL attr)" );
258  status = pthread_attr_getschedpolicy( NULL, &schedpolicy );
259  assert( status == EINVAL );
260 
261  puts( "Init: pthread_attr_getschedpolicy - EINVAL (NULL schedpolicy)" );
262  status = pthread_attr_getschedpolicy( &attr, NULL );
263  assert( status == EINVAL );
264 
265  puts( "Init: pthread_attr_getschedpolicy - EINVAL (not initialized attr)" );
266  status = pthread_attr_getschedpolicy( &destroyed_attr, &schedpolicy );
267  assert( status == EINVAL );
268 
269  puts( "Init: pthread_attr_getschedpolicy - SUCCESSFUL" );
270  status = pthread_attr_getschedpolicy( &attr, &schedpolicy );
271  assert( !status );
272  printf( "Init: current scheduler policy attribute = %d\n", schedpolicy );
273 
274  /* exercise get and set stack size */
275 
276  empty_line();
277 
278  puts( "Init: pthread_attr_setstacksize - EINVAL (NULL attr)" );
279  status = pthread_attr_setstacksize( NULL, 0 );
280  assert( status == EINVAL );
281 
282  puts( "Init: pthread_attr_setstacksize - EINVAL (not initialized attr)" );
283  status =
284     pthread_attr_setstacksize( &destroyed_attr, 0 );
285  assert( status == EINVAL );
286 
287  puts( "Init: pthread_attr_setstacksize - SUCCESSFUL (low stacksize)" );
288  status = pthread_attr_setstacksize( &attr, 0 );
289  assert( !status );
290
291  puts( "Init: pthread_attr_setstacksize - SUCCESSFUL (high stacksize)" );
292  status = pthread_attr_setstacksize( &attr, STACK_MINIMUM_SIZE * 2 );
293  assert( !status );
294 
295  puts( "Init: pthread_attr_getstacksize - EINVAL (NULL attr)" );
296  status = pthread_attr_getstacksize( NULL, &stacksize );
297  assert( status == EINVAL );
298 
299  puts( "Init: pthread_attr_getstacksize - EINVAL (NULL stacksize)" );
300  status = pthread_attr_getstacksize( &attr, NULL );
301  assert( status == EINVAL );
302 
303  puts( "Init: pthread_attr_getstacksize - EINVAL (not initialized attr)" );
304  status = pthread_attr_getstacksize( &destroyed_attr, &stacksize );
305  assert( status == EINVAL );
306 
307  puts( "Init: pthread_attr_getstacksize - SUCCESSFUL" );
308  status = pthread_attr_getstacksize( &attr, &stacksize );
309  assert( !status );
310  printf( "Init: current stack size attribute = %ld\n", (long) stacksize );
311
312  /* exercise get and set stack address */
313 
314  empty_line();
315 
316  puts( "Init: pthread_attr_setstackaddr - EINVAL (NULL attr)" );
317  status = pthread_attr_setstackaddr( NULL, NULL );
318  assert( status == EINVAL );
319 
320  puts( "Init: pthread_attr_setstackaddr - EINVAL (not initialized attr)" );
321  status =
322     pthread_attr_setstackaddr( &destroyed_attr, NULL );
323  assert( status == EINVAL );
324 
325  puts( "Init: pthread_attr_setstackaddr - SUCCESSFUL" );
326  status = pthread_attr_setstackaddr( &attr, 0 );
327  assert( !status );
328 
329  puts( "Init: pthread_attr_getstackaddr - EINVAL (NULL attr)" );
330  status = pthread_attr_getstackaddr( NULL, &stackaddr );
331  assert( status == EINVAL );
332 
333  puts( "Init: pthread_attr_getstackaddr - EINVAL (NULL stackaddr)" );
334  status = pthread_attr_getstackaddr( &attr, NULL );
335  assert( status == EINVAL );
336 
337  puts( "Init: pthread_attr_getstackaddr - EINVAL (not initialized attr)" );
338  status = pthread_attr_getstackaddr( &destroyed_attr, &stackaddr );
339  assert( status == EINVAL );
340 
341  puts( "Init: pthread_attr_getstackaddr - SUCCESSFUL" );
342  status = pthread_attr_getstackaddr( &attr, &stackaddr );
343  assert( !status );
344  printf( "Init: current stack address attribute = %p\n", stackaddr );
345 
346  /* exercise get and set detach state */
347 
348  empty_line();
349 
350  puts( "Init: pthread_attr_setdetachstate - EINVAL (NULL attr)" );
351  status = pthread_attr_setdetachstate( NULL, PTHREAD_CREATE_DETACHED );
352  assert( status == EINVAL );
353 
354  puts( "Init: pthread_attr_setdetachstate - EINVAL (not initialized attr)" );
355  status =
356     pthread_attr_setdetachstate( &destroyed_attr, PTHREAD_CREATE_JOINABLE );
357  assert( status == EINVAL );
358 
359  puts( "Init: pthread_attr_setdetachstate - EINVAL (invalid detachstate)" );
360  status = pthread_attr_setdetachstate( &attr, -1 );
361  assert( status == EINVAL );
362 
363  puts( "Init: pthread_attr_setdetachstate - SUCCESSFUL" );
364  status = pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_JOINABLE );
365  assert( !status );
366 
367  puts( "Init: pthread_attr_getdetachstate - EINVAL (NULL attr)" );
368  status = pthread_attr_getdetachstate( NULL, &detachstate );
369  assert( status == EINVAL );
370 
371  puts( "Init: pthread_attr_getdetachstate - EINVAL (NULL detatchstate)" );
372  status = pthread_attr_getdetachstate( &attr, NULL );
373  assert( status == EINVAL );
374 
375  puts( "Init: pthread_attr_getdetachstate - EINVAL (not initialized attr)" );
376  status = pthread_attr_getdetachstate( &destroyed_attr, &detachstate );
377  assert( status == EINVAL );
378 
379  puts( "Init: pthread_attr_getdetachstate - SUCCESSFUL" );
380  status = pthread_attr_getdetachstate( &attr, &detachstate );
381  assert( !status );
382  printf( "Init: current detach state attribute = %d\n", detachstate );
383
384  /* exercise get and set scheduling parameters */
385
386  empty_line();
387
388  puts( "Init: pthread_attr_getschedparam - SUCCESSFUL" );
389  status = pthread_attr_getschedparam( &attr, &schedparam );
390  assert( !status );
391
392  print_schedparam( "Init: ", &schedparam );
393
394  puts( "Init: pthread_attr_setschedparam - EINVAL (NULL attr)" );
395  status = pthread_attr_setschedparam( NULL, &schedparam );
396  assert( status == EINVAL );
397 
398  puts( "Init: pthread_attr_setschedparam - EINVAL (not initialized attr)" );
399  status = pthread_attr_setschedparam( &destroyed_attr, &schedparam );
400  assert( status == EINVAL );
401 
402  puts( "Init: pthread_attr_setschedparam - EINVAL (NULL schedparam)" );
403  status = pthread_attr_setschedparam( &attr, NULL );
404  assert( status == EINVAL );
405 
406  puts( "Init: pthread_attr_setschedparam - SUCCESSFUL" );
407  status = pthread_attr_setschedparam( &attr, &schedparam );
408  assert( !status );
409 
410  puts( "Init: pthread_attr_getschedparam - EINVAL (NULL attr)" );
411  status = pthread_attr_getschedparam( NULL, &schedparam );
412  assert( status == EINVAL );
413 
414  puts( "Init: pthread_attr_getschedparam - EINVAL (not initialized attr)" );
415  status = pthread_attr_getschedparam( &destroyed_attr, &schedparam );
416  assert( status == EINVAL );
417 
418  puts( "Init: pthread_attr_getschedparam - EINVAL (NULL schedparam)" );
419  status = pthread_attr_getschedparam( &attr, NULL );
420  assert( status == EINVAL );
421 
422  /* exercise pthread_getschedparam */
423
424  empty_line();
425
426  puts( "Init: pthread_getschedparam - EINVAL (NULL policy)" );
427  status = pthread_getschedparam( pthread_self(), NULL, &schedparam );
428  assert( status == EINVAL );
429 
430  puts( "Init: pthread_getschedparam - EINVAL (NULL schedparam)" );
431  status = pthread_getschedparam( pthread_self(), &schedpolicy, NULL );
432  assert( status == EINVAL );
433 
434  puts( "Init: pthread_getschedparam - ESRCH (bad thread)" );
435  status = pthread_getschedparam( -1, &schedpolicy, &schedparam );
436  assert( status == ESRCH );
437 
438  puts( "Init: pthread_getschedparam - SUCCESSFUL" );
439  status = pthread_getschedparam( pthread_self(), &schedpolicy, &schedparam );
440  assert( !status );
441 
442  printf( "Init: policy = %d\n", schedpolicy );
443
444  print_schedparam( "Init: ", &schedparam );
445
446  /* exercise pthread_setschedparam */
447
448  empty_line();
449
450  puts( "Init: pthread_setschedparam - EINVAL (NULL schedparam)" );
451  status = pthread_setschedparam( pthread_self(), SCHED_OTHER, NULL );
452  assert( status == EINVAL );
453
454  schedparam.sched_priority = -1;
455
456  puts( "Init: pthread_setschedparam - EINVAL (invalid priority)" );
457  status = pthread_setschedparam( pthread_self(), SCHED_OTHER, NULL );
458  assert( status == EINVAL );
459
460  schedparam.sched_priority = 128;
461
462  puts( "Init: pthread_setschedparam - EINVAL (invalid policy)" );
463  status = pthread_setschedparam( pthread_self(), -1, &schedparam );
464  assert( status == EINVAL );
465
466  puts( "Init: pthread_setschedparam - ESRCH (invalid thread)" );
467  status = pthread_setschedparam( -1, SCHED_OTHER, &schedparam );
468  assert( status == ESRCH );
469
470  /* now get sporadic server errors */
471
472  schedparam.ss_replenish_period.tv_sec = 1;
473  schedparam.ss_replenish_period.tv_nsec = 0;
474  schedparam.ss_initial_budget.tv_sec = 1;
475  schedparam.ss_initial_budget.tv_nsec = 1;
476
477  puts( "Init: pthread_setschedparam - EINVAL (replenish < budget)" );
478  status = pthread_setschedparam( pthread_self(), SCHED_SPORADIC, &schedparam );
479  assert( status == EINVAL );
480
481  schedparam.ss_replenish_period.tv_sec = 2;
482  schedparam.ss_replenish_period.tv_nsec = 0;
483  schedparam.ss_initial_budget.tv_sec = 1;
484  schedparam.ss_initial_budget.tv_nsec = 0;
485  schedparam.ss_low_priority = -1;
486
487  puts( "Init: pthread_setschedparam - EINVAL (invalid priority)" );
488  status = pthread_setschedparam( pthread_self(), SCHED_SPORADIC, &schedparam );
489  assert( status == EINVAL );
490
491  puts( "*** END OF POSIX TEST 7 ***" );
492  exit( 0 );
493
494  return NULL; /* just so the compiler thinks we returned something */
495}
Note: See TracBrowser for help on using the repository browser.