diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-03-01 10:10:19 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-03-01 10:12:42 +0100 |
commit | 03b21633d9783110e23932cc783507a2e5a244c9 (patch) | |
tree | 3969b6923d37433a0c98aff3872e008c099d6cdf | |
parent | bsp/altera-cyclone-v: Enable FIQ for group 0 irqs (diff) | |
download | rtems-03b21633d9783110e23932cc783507a2e5a244c9.tar.bz2 |
score: Fix _Scheduler_EDF_Cancel_job()
Remove the priority node only in case it is active.
-rw-r--r-- | cpukit/score/src/scheduleredfreleasejob.c | 6 | ||||
-rw-r--r-- | testsuites/sptests/spedfsched02/init.c | 17 | ||||
-rw-r--r-- | testsuites/sptests/spedfsched02/spedfsched02.doc | 2 |
3 files changed, 23 insertions, 2 deletions
diff --git a/cpukit/score/src/scheduleredfreleasejob.c b/cpukit/score/src/scheduleredfreleasejob.c index d7865ff5fb..f95e8bdc0b 100644 --- a/cpukit/score/src/scheduleredfreleasejob.c +++ b/cpukit/score/src/scheduleredfreleasejob.c @@ -84,8 +84,10 @@ void _Scheduler_EDF_Cancel_job( _Thread_Wait_acquire_critical( the_thread, queue_context ); - _Thread_Priority_remove( the_thread, priority_node, queue_context ); - _Priority_Node_set_inactive( priority_node ); + if ( _Priority_Node_is_active( priority_node ) ) { + _Thread_Priority_remove( the_thread, priority_node, queue_context ); + _Priority_Node_set_inactive( priority_node ); + } _Thread_Wait_release_critical( the_thread, queue_context ); } diff --git a/testsuites/sptests/spedfsched02/init.c b/testsuites/sptests/spedfsched02/init.c index fde85161a2..0aea4c5dbb 100644 --- a/testsuites/sptests/spedfsched02/init.c +++ b/testsuites/sptests/spedfsched02/init.c @@ -30,6 +30,21 @@ const char rtems_test_name[] = "SPEDFSCHED 2"; rtems_task_priority Prio[7] = { 0, 2, 2, 2, 2, 100, 1 }; +static void test_period_create_delete( void ) +{ + rtems_status_code sc; + rtems_id id; + + sc = rtems_rate_monotonic_create( + rtems_build_name( 'R', 'T', 'M', 'N' ), + &id + ); + rtems_test_assert( sc == RTEMS_SUCCESSFUL ); + + sc = rtems_rate_monotonic_delete( id ); + rtems_test_assert( sc == RTEMS_SUCCESSFUL ); +} + rtems_task Init( rtems_task_argument argument ) @@ -41,6 +56,8 @@ rtems_task Init( TEST_BEGIN(); + test_period_create_delete(); + Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' ); Task_name[ 2 ] = rtems_build_name( 'T', 'A', '2', ' ' ); Task_name[ 3 ] = rtems_build_name( 'T', 'A', '3', ' ' ); diff --git a/testsuites/sptests/spedfsched02/spedfsched02.doc b/testsuites/sptests/spedfsched02/spedfsched02.doc index fec94d101b..dc52f1f8db 100644 --- a/testsuites/sptests/spedfsched02/spedfsched02.doc +++ b/testsuites/sptests/spedfsched02/spedfsched02.doc @@ -17,3 +17,5 @@ directives: concepts: a. Verifies EDF Scheduling behavior. + + b. Verifies that a period object can be deleted immediatley after creation. |