File indexing completed on 2025-05-11 08:24:36
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #ifdef HAVE_CONFIG_H
0030 #include "config.h"
0031 #endif
0032
0033 #include <pthread.h>
0034 #include <sched.h>
0035
0036 #define CONFIGURE_INIT
0037 #include "system.h"
0038 #include <errno.h>
0039 #include "tmacros.h"
0040 #include "pritime.h"
0041
0042 const char rtems_test_name[] = "PSX 7";
0043
0044 void print_schedparam(
0045 char *prefix,
0046 struct sched_param *schedparam
0047 );
0048
0049 void print_schedparam(
0050 char *prefix,
0051 struct sched_param *schedparam
0052 )
0053 {
0054 printf( "%ssched priority = %d\n", prefix, schedparam->sched_priority );
0055 #if defined(_POSIX_SPORADIC_SERVER)
0056 printf( "%ssched_ss_low_priority = %d\n",
0057 prefix, schedparam->sched_ss_low_priority );
0058 printf( "%ssched_ss_replenish_period = (%" PRIdtime_t ", %ld)\n", prefix,
0059 schedparam->sched_ss_repl_period.tv_sec,
0060 schedparam->sched_ss_repl_period.tv_nsec );
0061 printf( "%ssched_sched_ss_initial_budget = (%" PRIdtime_t ", %ld)\n", prefix,
0062 schedparam->sched_ss_init_budget.tv_sec,
0063 schedparam->sched_ss_init_budget.tv_nsec );
0064 #else
0065 printf( "%s_POSIX_SPORADIC_SERVER is not defined\n", prefix );
0066 #endif
0067 }
0068
0069 void *POSIX_Init(
0070 void *argument
0071 )
0072 {
0073 int status;
0074 int scope;
0075 int inheritsched;
0076 int schedpolicy;
0077 size_t stacksize;
0078 size_t guardsize;
0079 void *stackaddr;
0080 int detachstate;
0081 struct sched_param schedparam;
0082 pthread_attr_t attr;
0083 pthread_attr_t destroyed_attr;
0084
0085 TEST_BEGIN();
0086
0087
0088
0089 set_time( TM_FRIDAY, TM_MAY, 24, 96, 11, 5, 0 );
0090
0091
0092
0093 Init_id = pthread_self();
0094 printf( "Init's ID is 0x%08" PRIxpthread_t "\n", Init_id );
0095
0096
0097
0098 puts( "Init - pthread_attr_init - EINVAL (NULL attr)" );
0099 status = pthread_attr_init( NULL );
0100 fatal_directive_check_status_only( status, EINVAL, "null attribute" );
0101
0102 puts( "Init - pthread_attr_init - SUCCESSFUL" );
0103 status = pthread_attr_init( &attr );
0104 posix_service_failed( status, "pthread_attr_init" );
0105
0106 puts( "Init - initialize and destroy an attribute - SUCCESSFUL" );
0107 status = pthread_attr_init( &destroyed_attr );
0108 posix_service_failed( status, "pthread_attr_init");
0109
0110 status = pthread_attr_destroy( &destroyed_attr );
0111 posix_service_failed( status, "pthread_attr_destroy");
0112
0113 puts( "Init - pthread_attr_destroy - EINVAL (NULL attr)" );
0114 status = pthread_attr_destroy( NULL );
0115 fatal_directive_check_status_only( status, EINVAL, "NULL attribute" );
0116
0117 puts( "Init - pthread_attr_destroy - EINVAL (not initialized)" );
0118 status = pthread_attr_destroy( &destroyed_attr );
0119 fatal_directive_check_status_only( status, EINVAL, "not initialized" );
0120
0121
0122
0123 puts( "Init - pthread_create - EINVAL (attr not initialized)" );
0124 status = pthread_create( &Task_id, &destroyed_attr, Task_1, NULL );
0125 fatal_directive_check_status_only( status, EINVAL, "attribute not initialized" );
0126
0127
0128 status = pthread_attr_setstackaddr( &attr, (void *)&schedparam );
0129 posix_service_failed( status, "setstackaddr");
0130
0131
0132 attr.stacksize = 0;
0133
0134 puts( "Init - pthread_create - EINVAL (stacksize too small)" );
0135 status = pthread_create( &Task_id, &attr, Task_1, NULL );
0136 fatal_directive_check_status_only( status, EINVAL, "stacksize too small" );
0137
0138
0139 status = pthread_attr_init( &attr );
0140 posix_service_failed( status, "pthread_attr_init");
0141
0142 attr.stacksize = rtems_configuration_get_work_space_size() * 10;
0143 puts( "Init - pthread_create - EAGAIN (stacksize too large)" );
0144 status = pthread_create( &Task_id, &attr, Task_1, NULL );
0145 fatal_directive_check_status_only( status, EAGAIN, "stacksize too large" );
0146
0147 status = pthread_attr_init( &attr );
0148 posix_service_failed( status, "pthread_attr_init");
0149
0150
0151 attr.inheritsched = -1;
0152
0153 puts( "Init - pthread_create - EINVAL (invalid inherit scheduler)" );
0154 status = pthread_create( &Task_id, &attr, Task_1, NULL );
0155 fatal_directive_check_status_only( status, EINVAL, "invalid inherit scheduler" );
0156
0157
0158
0159 status = pthread_attr_init( &attr );
0160 posix_service_failed( status, " pthread_attr_init");
0161
0162
0163 attr.contentionscope = PTHREAD_SCOPE_SYSTEM;
0164
0165 puts( "Init - pthread_create - ENOTSUP (unsupported system contention scope)" );
0166 status = pthread_create( &Task_id, &attr, Task_1, NULL );
0167 fatal_directive_check_status_only( status, ENOTSUP,
0168 "unsupported system contention scope" );
0169
0170 status = pthread_attr_init( &attr );
0171 posix_service_failed( status, "pthread_attr_init");
0172
0173
0174
0175 status = pthread_attr_setinheritsched( &attr, PTHREAD_INHERIT_SCHED );
0176 posix_service_failed( status, "pthread_attr_setinheritsched");
0177
0178 puts( "Init - pthread_create - SUCCESSFUL (inherit scheduler)" );
0179 status = pthread_create( &Task_id, &attr, Task_1, NULL );
0180 posix_service_failed( status, "pthread_create");
0181
0182 status = pthread_join( Task_id, NULL );
0183 posix_service_failed( status, " pthread_join");
0184
0185
0186
0187
0188
0189 empty_line();
0190
0191 status = pthread_attr_init( &attr );
0192 posix_service_failed( status, "pthread_attr_init");
0193
0194 puts( "Init - pthread_attr_setscope - EINVAL (NULL attr)" );
0195 status = pthread_attr_setscope( NULL, PTHREAD_SCOPE_PROCESS );
0196 fatal_directive_check_status_only( status, EINVAL , "NULL attr" );
0197
0198 puts( "Init - pthread_attr_setscope - ENOTSUP" );
0199 status = pthread_attr_setscope( &attr, PTHREAD_SCOPE_SYSTEM );
0200 fatal_directive_check_status_only( status, ENOTSUP, "PTHREAD_SCOPE_SYSTEM" );
0201
0202 puts( "Init - pthread_attr_setscope - EINVAL (not initialized attr)" );
0203 status = pthread_attr_setscope( &destroyed_attr, PTHREAD_SCOPE_PROCESS );
0204 fatal_directive_check_status_only( status, EINVAL, "not initialized attr" );
0205
0206 puts( "Init - pthread_attr_setscope - EINVAL (invalid scope)" );
0207 status = pthread_attr_setscope( &attr, -1 );
0208 fatal_directive_check_status_only( status, EINVAL, "invalid scope" );
0209
0210 puts( "Init - pthread_attr_setscope - SUCCESSFUL" );
0211 status = pthread_attr_setscope( &attr, PTHREAD_SCOPE_PROCESS );
0212 posix_service_failed( status, "pthread_attr_setscope");
0213
0214 puts( "Init - pthread_attr_getscope - EINVAL (NULL attr)" );
0215 status = pthread_attr_getscope( NULL, &scope );
0216 fatal_directive_check_status_only( status, EINVAL, "NULL attr" );
0217
0218 puts( "Init - pthread_attr_getscope - EINVAL (NULL scope)" );
0219 status = pthread_attr_getscope( &attr, NULL );
0220 fatal_directive_check_status_only( status, EINVAL, "NULL scope" );
0221
0222 puts( "Init - pthread_attr_getscope - EINVAL (not initialized attr)" );
0223 status = pthread_attr_getscope( &destroyed_attr, &scope );
0224 fatal_directive_check_status_only( status, EINVAL, "not initialized attr" );
0225
0226 puts( "Init - pthread_attr_getscope - SUCCESSFUL" );
0227 status = pthread_attr_getscope( &attr, &scope );
0228 posix_service_failed( status, "pthread_attr_getscope");
0229 printf( "Init - current scope attribute = %d\n", scope );
0230
0231
0232
0233 empty_line();
0234
0235 puts( "Init - pthread_attr_setinheritsched - EINVAL (NULL attr)" );
0236 status = pthread_attr_setinheritsched( NULL, PTHREAD_INHERIT_SCHED );
0237 fatal_directive_check_status_only( status, EINVAL, "NULL attr" );
0238
0239 puts( "Init - pthread_attr_setinheritsched - EINVAL (not initialized attr)" );
0240 status =
0241 pthread_attr_setinheritsched( &destroyed_attr, PTHREAD_INHERIT_SCHED );
0242 fatal_directive_check_status_only( status, EINVAL, "not initialized attr" );
0243
0244 puts( "Init - pthread_attr_setinheritsched - ENOTSUP (invalid inheritsched)" );
0245 status = pthread_attr_setinheritsched( &attr, -1 );
0246 fatal_directive_check_status_only( status, ENOTSUP, "invalid inheritsched" );
0247
0248 puts( "Init - pthread_attr_setinheritsched - SUCCESSFUL" );
0249 status = pthread_attr_setinheritsched( &attr, PTHREAD_INHERIT_SCHED );
0250 posix_service_failed( status, "pthread_attr_setinheritsched");
0251
0252 puts( "Init - pthread_attr_getinheritsched - EINVAL (NULL attr)" );
0253 status = pthread_attr_getinheritsched( NULL, &inheritsched );
0254 fatal_directive_check_status_only( status, EINVAL, "NULL attr" );
0255
0256 puts( "Init - pthread_attr_getinheritsched - EINVAL (NULL inheritsched)" );
0257 status = pthread_attr_getinheritsched( &attr, NULL );
0258 fatal_directive_check_status_only( status, EINVAL, "NULL inheritsched" );
0259
0260 puts( "Init - pthread_attr_getinheritsched - EINVAL (not initialized attr)" );
0261 status = pthread_attr_getinheritsched( &destroyed_attr, &inheritsched );
0262 fatal_directive_check_status_only( status, EINVAL, "not initialized attr" );
0263
0264 puts( "Init - pthread_attr_getinheritsched - SUCCESSFUL" );
0265 status = pthread_attr_getinheritsched( &attr, &inheritsched );
0266 posix_service_failed( status, "pthread_attr_getinheritsched");
0267 printf( "Init - current inherit scheduler attribute = %d\n", inheritsched );
0268
0269
0270
0271 empty_line();
0272
0273 puts( "Init - pthread_attr_setschedpolicy - EINVAL (NULL attr)" );
0274 status = pthread_attr_setschedpolicy( NULL, SCHED_FIFO );
0275 fatal_directive_check_status_only( status, EINVAL, "NULL attr" );
0276
0277 puts( "Init - pthread_attr_setschedpolicy - EINVAL (not initialized attr)" );
0278 status =
0279 pthread_attr_setschedpolicy( &destroyed_attr, SCHED_OTHER );
0280 fatal_directive_check_status_only( status, EINVAL, "not initialized attr" );
0281
0282 puts( "Init - pthread_attr_setschedpolicy - ENOTSUP (invalid schedpolicy)" );
0283 status = pthread_attr_setschedpolicy( &attr, -1 );
0284 fatal_directive_check_status_only( status, ENOTSUP, "invalid schedpolicy" );
0285
0286 puts( "Init - pthread_attr_setschedpolicy - SUCCESSFUL" );
0287 status = pthread_attr_setschedpolicy( &attr, SCHED_RR );
0288 posix_service_failed( status, "pthread_attr_setschedpolicy");
0289
0290 puts( "Init - pthread_attr_getschedpolicy - EINVAL (NULL attr)" );
0291 status = pthread_attr_getschedpolicy( NULL, &schedpolicy );
0292 fatal_directive_check_status_only( status, EINVAL, "NULL attr" );
0293
0294 puts( "Init - pthread_attr_getschedpolicy - EINVAL (NULL schedpolicy)" );
0295 status = pthread_attr_getschedpolicy( &attr, NULL );
0296 fatal_directive_check_status_only( status, EINVAL, "NULL schedpolicy" );
0297
0298 puts( "Init - pthread_attr_getschedpolicy - EINVAL (not initialized attr)" );
0299 status = pthread_attr_getschedpolicy( &destroyed_attr, &schedpolicy );
0300 fatal_directive_check_status_only( status, EINVAL, "not initialized attr" );
0301
0302 puts( "Init - pthread_attr_getschedpolicy - SUCCESSFUL" );
0303 status = pthread_attr_getschedpolicy( &attr, &schedpolicy );
0304 posix_service_failed( status, "pthread_attr_getschedpolicy");
0305 printf( "Init - current scheduler policy attribute = %d\n", schedpolicy );
0306
0307
0308
0309 empty_line();
0310
0311 puts( "Init - pthread_attr_setstacksize - EINVAL (NULL attr)" );
0312 status = pthread_attr_setstacksize( NULL, 0 );
0313 fatal_directive_check_status_only( status, EINVAL, "NULL attr" );
0314
0315 puts( "Init - pthread_attr_setstacksize - EINVAL (not initialized attr)" );
0316 status =
0317 pthread_attr_setstacksize( &destroyed_attr, 0 );
0318 fatal_directive_check_status_only( status, EINVAL, "not initialized attr" );
0319
0320 puts( "Init - pthread_attr_setstacksize - SUCCESSFUL (low stacksize)" );
0321 status = pthread_attr_setstacksize( &attr, 0 );
0322 posix_service_failed( status, "pthread_attr_setstacksize");
0323
0324 puts( "Init - pthread_attr_setstacksize - SUCCESSFUL (high stacksize)" );
0325 status = pthread_attr_setstacksize( &attr, STACK_MINIMUM_SIZE * 2 );
0326 posix_service_failed( status, "");
0327
0328 puts( "Init - pthread_attr_getstacksize - EINVAL (NULL attr)" );
0329 status = pthread_attr_getstacksize( NULL, &stacksize );
0330 fatal_directive_check_status_only( status, EINVAL, "NULL attr" );
0331
0332 puts( "Init - pthread_attr_getstacksize - EINVAL (NULL stacksize)" );
0333 status = pthread_attr_getstacksize( &attr, NULL );
0334 fatal_directive_check_status_only( status, EINVAL, "NULL stacksize" );
0335
0336 puts( "Init - pthread_attr_getstacksize - EINVAL (not initialized attr)" );
0337 status = pthread_attr_getstacksize( &destroyed_attr, &stacksize );
0338 fatal_directive_check_status_only( status, EINVAL, "not initialized attr" );
0339
0340 puts( "Init - pthread_attr_getstacksize - SUCCESSFUL" );
0341 status = pthread_attr_getstacksize( &attr, &stacksize );
0342 posix_service_failed( status, "pthread_attr_getstacksize");
0343 if ( stacksize == (STACK_MINIMUM_SIZE * 2) )
0344 printf( "Init - current stack size attribute is OK\n" );
0345
0346
0347 empty_line();
0348
0349 puts( "Init - pthread_attr_setstackaddr - EINVAL (NULL attr)" );
0350 status = pthread_attr_setstackaddr( NULL, NULL );
0351 fatal_directive_check_status_only( status, EINVAL, "NULL attr" );
0352
0353 puts( "Init - pthread_attr_setstackaddr - EINVAL (not initialized attr)" );
0354 status = pthread_attr_setstackaddr( &destroyed_attr, NULL );
0355 fatal_directive_check_status_only( status, EINVAL, "not initialized attr" );
0356
0357 puts( "Init - pthread_attr_setstackaddr - SUCCESSFUL" );
0358 status = pthread_attr_setstackaddr( &attr, 0 );
0359 posix_service_failed( status, "");
0360
0361
0362 puts( "Init - pthread_attr_getstackaddr - EINVAL (NULL attr)" );
0363 status = pthread_attr_getstackaddr( NULL, &stackaddr );
0364 fatal_directive_check_status_only( status, EINVAL, "NULL attr" );
0365
0366 puts( "Init - pthread_attr_getstackaddr - EINVAL (NULL stackaddr)" );
0367 status = pthread_attr_getstackaddr( &attr, NULL );
0368 fatal_directive_check_status_only( status, EINVAL, "NULL stackaddr" );
0369
0370 puts( "Init - pthread_attr_getstackaddr - EINVAL (not initialized attr)" );
0371 status = pthread_attr_getstackaddr( &destroyed_attr, &stackaddr );
0372 fatal_directive_check_status_only( status, EINVAL, "not initialized attr" );
0373
0374 puts( "Init - pthread_attr_getstackaddr - SUCCESSFUL" );
0375 status = pthread_attr_getstackaddr( &attr, &stackaddr );
0376 posix_service_failed( status, "pthread_attr_getstackaddr");
0377 printf( "Init - current stack address attribute = %p\n", stackaddr );
0378
0379
0380 empty_line();
0381
0382 puts( "Init - pthread_attr_setstack- EINVAL (NULL attr)" );
0383 status = pthread_attr_setstack( NULL, &stackaddr, 1024 );
0384 fatal_directive_check_status_only( status, EINVAL, "NULL attr" );
0385
0386 puts( "Init - pthread_attr_setstack- EINVAL (destroyed attr)" );
0387 status = pthread_attr_setstack( &destroyed_attr, &stackaddr, 1024 );
0388 fatal_directive_check_status_only( status, EINVAL, "NULL attr" );
0389
0390 puts( "Init - pthread_attr_setstack- SUCCESSFUL (< min stack)" );
0391 status = pthread_attr_setstack( &attr, stackaddr, 0 );
0392 posix_service_failed( status, "OK");
0393
0394 puts( "Init - pthread_attr_setstack- SUCCESSFUL (big stack)" );
0395 status = pthread_attr_setstack( &attr, stackaddr, STACK_MINIMUM_SIZE * 2 );
0396 posix_service_failed( status, "OK");
0397
0398 puts( "Init - pthread_attr_getstack- EINVAL (NULL attr)" );
0399 status = pthread_attr_getstack( NULL, &stackaddr, &stacksize );
0400 fatal_directive_check_status_only( status, EINVAL, "NULL attr" );
0401
0402 puts( "Init - pthread_attr_getstack- EINVAL (destroyed attr)" );
0403 status = pthread_attr_getstack( &destroyed_attr, &stackaddr, &stacksize );
0404 fatal_directive_check_status_only( status, EINVAL, "&destroyed attr" );
0405
0406 puts( "Init - pthread_attr_getstack- EINVAL (NULL stack)" );
0407 status = pthread_attr_getstack( &attr, NULL, &stacksize );
0408 fatal_directive_check_status_only( status, EINVAL, "&NULL stack" );
0409
0410 puts( "Init - pthread_attr_getstack- EINVAL (NULL stacksize)" );
0411 status = pthread_attr_getstack( &attr, &stackaddr, NULL );
0412 fatal_directive_check_status_only( status, EINVAL, "&NULL size" );
0413
0414 puts( "Init - pthread_attr_getstack- SUCCESSFUL" );
0415 status = pthread_attr_getstack( &attr, &stackaddr, &stacksize );
0416 posix_service_failed( status, "pthread_attr_getstack");
0417
0418
0419 empty_line();
0420
0421 puts( "Init - pthread_attr_setguardsize - EINVAL (NULL attr)" );
0422 status = pthread_attr_setguardsize( NULL, 0 );
0423 fatal_directive_check_status_only( status, EINVAL, "NULL attr" );
0424
0425 puts( "Init - pthread_attr_setguardsize - EINVAL (not initialized attr)" );
0426 status = pthread_attr_setguardsize( &destroyed_attr, 0 );
0427 fatal_directive_check_status_only( status, EINVAL, "not initialized attr" );
0428
0429 puts( "Init - pthread_attr_setguardsize - SUCCESSFUL (low guardsize)" );
0430 status = pthread_attr_setguardsize( &attr, 0 );
0431 posix_service_failed( status, "pthread_attr_setguardsize");
0432
0433 puts( "Init - pthread_attr_setguardsize - SUCCESSFUL (high guardsize)" );
0434 status = pthread_attr_setguardsize( &attr, STACK_MINIMUM_SIZE * 2 );
0435 posix_service_failed( status, "");
0436
0437 puts( "Init - pthread_attr_getguardsize - EINVAL (NULL attr)" );
0438 status = pthread_attr_getguardsize( NULL, &guardsize );
0439 fatal_directive_check_status_only( status, EINVAL, "NULL attr" );
0440
0441 puts( "Init - pthread_attr_getguardsize - EINVAL (NULL guardsize)" );
0442 status = pthread_attr_getguardsize( &attr, NULL );
0443 fatal_directive_check_status_only( status, EINVAL, "NULL guardsize" );
0444
0445 puts( "Init - pthread_attr_getguardsize - EINVAL (not initialized attr)" );
0446 status = pthread_attr_getguardsize( &destroyed_attr, &guardsize );
0447 fatal_directive_check_status_only( status, EINVAL, "not initialized attr" );
0448
0449 puts( "Init - pthread_attr_getguardsize - SUCCESSFUL" );
0450 status = pthread_attr_getguardsize( &attr, &guardsize );
0451 posix_service_failed( status, "pthread_attr_getguardsize");
0452
0453
0454 empty_line();
0455
0456 puts( "Init - pthread_attr_setdetachstate - EINVAL (NULL attr)" );
0457 status = pthread_attr_setdetachstate( NULL, PTHREAD_CREATE_DETACHED );
0458 fatal_directive_check_status_only( status, EINVAL, "NULL attr" );
0459
0460 puts( "Init - pthread_attr_setdetachstate - EINVAL (not initialized attr)" );
0461 status =
0462 pthread_attr_setdetachstate( &destroyed_attr, PTHREAD_CREATE_JOINABLE );
0463 fatal_directive_check_status_only( status, EINVAL, "not initialized att" );
0464
0465 puts( "Init - pthread_attr_setdetachstate - EINVAL (invalid detachstate)" );
0466 status = pthread_attr_setdetachstate( &attr, -1 );
0467 fatal_directive_check_status_only( status, EINVAL, "invalid detachstate" );
0468
0469 puts( "Init - pthread_attr_setdetachstate - SUCCESSFUL" );
0470 status = pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_JOINABLE );
0471 posix_service_failed( status, "pthread_attr_setdetachstate");
0472
0473 puts( "Init - pthread_attr_getdetachstate - EINVAL (NULL attr)" );
0474 status = pthread_attr_getdetachstate( NULL, &detachstate );
0475 fatal_directive_check_status_only( status, EINVAL, "NULL attr" );
0476
0477 puts( "Init - pthread_attr_getdetachstate - EINVAL (NULL detatchstate)" );
0478 status = pthread_attr_getdetachstate( &attr, NULL );
0479 fatal_directive_check_status_only( status, EINVAL, "NULL detatchstate" );
0480
0481 puts( "Init - pthread_attr_getdetachstate - EINVAL (not initialized attr)" );
0482 status = pthread_attr_getdetachstate( &destroyed_attr, &detachstate );
0483 fatal_directive_check_status_only( status, EINVAL, "not initialized attr" );
0484
0485 puts( "Init - pthread_attr_getdetachstate - SUCCESSFUL" );
0486 status = pthread_attr_getdetachstate( &attr, &detachstate );
0487 posix_service_failed( status, "pthread_attr_getdetachstate");
0488 printf( "Init - current detach state attribute = %d\n", detachstate );
0489
0490
0491
0492 empty_line();
0493
0494 puts( "Init - pthread_attr_getschedparam - SUCCESSFUL" );
0495 status = pthread_attr_getschedparam( &attr, &schedparam );
0496 posix_service_failed( status, "pthread_attr_getschedparam");
0497
0498 print_schedparam( "Init - ", &schedparam );
0499
0500 puts( "Init - pthread_attr_setschedparam - EINVAL (NULL attr)" );
0501 status = pthread_attr_setschedparam( NULL, &schedparam );
0502 fatal_directive_check_status_only( status, EINVAL, "NULL attr" );
0503
0504 puts( "Init - pthread_attr_setschedparam - EINVAL (not initialized attr)" );
0505 status = pthread_attr_setschedparam( &destroyed_attr, &schedparam );
0506 fatal_directive_check_status_only( status, EINVAL, "not initialized attr" );
0507
0508 puts( "Init - pthread_attr_setschedparam - EINVAL (NULL schedparam)" );
0509 status = pthread_attr_setschedparam( &attr, NULL );
0510 fatal_directive_check_status_only( status, EINVAL, "NULL schedparam" );
0511
0512 puts( "Init - pthread_attr_setschedparam - SUCCESSFUL" );
0513 status = pthread_attr_setschedparam( &attr, &schedparam );
0514 posix_service_failed( status, "pthread_attr_setschedparam");
0515
0516 puts( "Init - pthread_attr_getschedparam - EINVAL (NULL attr)" );
0517 status = pthread_attr_getschedparam( NULL, &schedparam );
0518 fatal_directive_check_status_only( status, EINVAL, "pthread_attr_getschedparam" );
0519
0520 puts( "Init - pthread_attr_getschedparam - EINVAL (not initialized attr)" );
0521 status = pthread_attr_getschedparam( &destroyed_attr, &schedparam );
0522 fatal_directive_check_status_only( status, EINVAL, "not initialized attr" );
0523
0524 puts( "Init - pthread_attr_getschedparam - EINVAL (NULL schedparam)" );
0525 status = pthread_attr_getschedparam( &attr, NULL );
0526 fatal_directive_check_status_only( status, EINVAL, "NULL schedparam" );
0527
0528
0529
0530 empty_line();
0531
0532 puts( "Init - pthread_getschedparam - EINVAL (NULL policy)" );
0533 status = pthread_getschedparam( pthread_self(), NULL, &schedparam );
0534 fatal_directive_check_status_only( status, EINVAL, "NULL policy" );
0535
0536 puts( "Init - pthread_getschedparam - EINVAL (NULL schedparam)" );
0537 status = pthread_getschedparam( pthread_self(), &schedpolicy, NULL );
0538 fatal_directive_check_status_only( status, EINVAL, "NULL schedparam" );
0539
0540 puts( "Init - pthread_getschedparam - ESRCH (bad thread)" );
0541 status = pthread_getschedparam( (pthread_t) -1, &schedpolicy, &schedparam );
0542 fatal_directive_check_status_only( status, ESRCH, "bad thread" );
0543
0544 puts( "Init - pthread_getschedparam - SUCCESSFUL" );
0545 status = pthread_getschedparam( pthread_self(), &schedpolicy, &schedparam );
0546 posix_service_failed( status, "pthread_getschedparam");
0547
0548 printf( "Init - policy = %d\n", schedpolicy );
0549
0550 print_schedparam( "Init - ", &schedparam );
0551
0552
0553
0554 empty_line();
0555
0556 puts( "Init - pthread_setschedparam - EINVAL (NULL schedparam)" );
0557 status = pthread_setschedparam( pthread_self(), SCHED_OTHER, NULL );
0558 fatal_directive_check_status_only( status, EINVAL, "NULL schedparam" );
0559
0560 schedparam.sched_priority = -1;
0561
0562 puts( "Init - pthread_setschedparam - EINVAL (invalid priority)" );
0563 status = pthread_setschedparam( pthread_self(), SCHED_OTHER, NULL );
0564 fatal_directive_check_status_only( status, EINVAL, "invalid priority" );
0565
0566
0567 status = pthread_getschedparam( pthread_self(), &schedpolicy, &schedparam );
0568 posix_service_failed( status, "pthread_getschedparam");
0569
0570 puts( "Init - pthread_setschedparam - EINVAL (invalid policy)" );
0571 status = pthread_setschedparam( pthread_self(), -1, &schedparam );
0572 fatal_directive_check_status_only( status, EINVAL, "invalid policy" );
0573
0574 puts( "Init - pthread_setschedparam - ESRCH (invalid thread)" );
0575 status = pthread_setschedparam( (pthread_t) -1, SCHED_OTHER, &schedparam );
0576 fatal_directive_check_status_only( status, ESRCH, "invalid thread" );
0577
0578 #if defined(RTEMS_POSIX_API)
0579
0580
0581 schedparam.sched_ss_repl_period.tv_sec = 0;
0582 schedparam.sched_ss_repl_period.tv_nsec = 0;
0583 schedparam.sched_ss_init_budget.tv_sec = 1;
0584 schedparam.sched_ss_init_budget.tv_nsec = 1;
0585
0586 puts( "Init - pthread_setschedparam - EINVAL (replenish == 0)" );
0587 status = pthread_setschedparam( pthread_self(), SCHED_SPORADIC, &schedparam );
0588 fatal_directive_check_status_only( status, EINVAL, "replenish == 0" );
0589
0590 schedparam.sched_ss_repl_period.tv_sec = 1;
0591 schedparam.sched_ss_repl_period.tv_nsec = 1;
0592 schedparam.sched_ss_init_budget.tv_sec = 0;
0593 schedparam.sched_ss_init_budget.tv_nsec = 0;
0594
0595 puts( "Init - pthread_setschedparam - EINVAL (budget == 0)" );
0596 status = pthread_setschedparam( pthread_self(), SCHED_SPORADIC, &schedparam );
0597 fatal_directive_check_status_only( status, EINVAL, "budget == 0" );
0598
0599 schedparam.sched_ss_repl_period.tv_sec = 1;
0600 schedparam.sched_ss_repl_period.tv_nsec = 0;
0601 schedparam.sched_ss_init_budget.tv_sec = 1;
0602 schedparam.sched_ss_init_budget.tv_nsec = 1;
0603
0604 puts( "Init - pthread_setschedparam - EINVAL (replenish < budget)" );
0605 status = pthread_setschedparam( pthread_self(), SCHED_SPORADIC, &schedparam );
0606 fatal_directive_check_status_only( status, EINVAL, "replenish < budget" );
0607
0608 schedparam.sched_ss_repl_period.tv_sec = 2;
0609 schedparam.sched_ss_repl_period.tv_nsec = 0;
0610 schedparam.sched_ss_init_budget.tv_sec = 1;
0611 schedparam.sched_ss_init_budget.tv_nsec = 0;
0612 schedparam.sched_ss_low_priority = -1;
0613
0614 puts( "Init - pthread_setschedparam - EINVAL (invalid priority)" );
0615 status = pthread_setschedparam( pthread_self(), SCHED_SPORADIC, &schedparam );
0616 fatal_directive_check_status_only( status, EINVAL, "invalid priority" );
0617
0618
0619
0620
0621
0622 empty_line();
0623
0624 puts( "Init - pthread_attr_init - SUCCESSFUL" );
0625 status = pthread_attr_init( &attr );
0626 posix_service_failed( status, "pthread_attr_init" );
0627
0628 puts( "Init - pthread_attr_setinheritsched - EXPLICIT - SUCCESSFUL" );
0629 status = pthread_attr_setinheritsched( &attr, PTHREAD_EXPLICIT_SCHED );
0630 rtems_test_assert( !status );
0631
0632 schedparam.sched_ss_repl_period.tv_sec = 3;
0633 schedparam.sched_ss_repl_period.tv_nsec = 3;
0634 schedparam.sched_ss_init_budget.tv_sec = 1;
0635 schedparam.sched_ss_init_budget.tv_nsec = 1;
0636 schedparam.sched_priority = sched_get_priority_max( SCHED_FIFO );
0637 schedparam.sched_ss_low_priority = sched_get_priority_max( SCHED_FIFO ) - 6;
0638
0639 puts( "Init - pthread_attr_setschedpolicy - SUCCESSFUL" );
0640 status = pthread_attr_setschedpolicy( &attr, SCHED_SPORADIC );
0641 posix_service_failed( status, "pthread_attr_setschedparam");
0642 puts( "Init - pthread_attr_setschedparam - SUCCESSFUL" );
0643 status = pthread_attr_setschedparam( &attr, &schedparam );
0644 posix_service_failed( status, "pthread_attr_setschedparam");
0645
0646 status = pthread_create( &Task2_id, &attr, Task_2, NULL );
0647 rtems_test_assert( !status );
0648
0649 status = pthread_join( Task2_id, NULL );
0650 posix_service_failed( status, " pthread_join");
0651 #endif
0652
0653 TEST_END();
0654 rtems_test_exit( 0 );
0655
0656 return NULL;
0657 }