diff options
Diffstat (limited to 'cpukit/posix')
-rw-r--r-- | cpukit/posix/src/psxtransschedparam.c | 8 | ||||
-rw-r--r-- | cpukit/posix/src/pthread.c | 8 |
2 files changed, 10 insertions, 6 deletions
diff --git a/cpukit/posix/src/psxtransschedparam.c b/cpukit/posix/src/psxtransschedparam.c index 0940d67b5b..415e807d4c 100644 --- a/cpukit/posix/src/psxtransschedparam.c +++ b/cpukit/posix/src/psxtransschedparam.c @@ -49,6 +49,14 @@ int _POSIX_Thread_Translate_sched_param( } if ( policy == SCHED_SPORADIC ) { + if ( (param->ss_replenish_period.tv_sec == 0) && + (param->ss_replenish_period.tv_nsec == 0) ) + return EINVAL; + + if ( (param->ss_initial_budget.tv_sec == 0) && + (param->ss_initial_budget.tv_nsec == 0) ) + return EINVAL; + if ( _Timespec_To_ticks( ¶m->ss_replenish_period ) < _Timespec_To_ticks( ¶m->ss_initial_budget ) ) return EINVAL; diff --git a/cpukit/posix/src/pthread.c b/cpukit/posix/src/pthread.c index c9f93f7e25..ee5a8db9aa 100644 --- a/cpukit/posix/src/pthread.c +++ b/cpukit/posix/src/pthread.c @@ -78,11 +78,9 @@ void _POSIX_Threads_Sporadic_budget_TSR( api = the_thread->API_Extensions[ THREAD_API_POSIX ]; + /* ticks is guaranteed to be at least one */ ticks = _Timespec_To_ticks( &api->schedparam.ss_initial_budget ); - if ( !ticks ) - ticks = 1; - the_thread->cpu_time_budget = ticks; new_priority = _POSIX_Priority_To_core( api->ss_high_priority ); @@ -92,11 +90,9 @@ void _POSIX_Threads_Sporadic_budget_TSR( the_thread->current_priority > new_priority ) _Thread_Change_priority( the_thread, new_priority, true ); + /* ticks is guaranteed to be at least one */ ticks = _Timespec_To_ticks( &api->schedparam.ss_replenish_period ); - if ( !ticks ) - ticks = 1; - _Watchdog_Insert_ticks( &api->Sporadic_timer, ticks ); } |