[rtems commit] score: Fix _Scheduler_EDF_Cancel_job()
Sebastian Huber
sebh at rtems.org
Fri Mar 1 09:19:20 UTC 2019
Module: rtems
Branch: master
Commit: 03b21633d9783110e23932cc783507a2e5a244c9
Changeset: http://git.rtems.org/rtems/commit/?id=03b21633d9783110e23932cc783507a2e5a244c9
Author: Sebastian Huber <sebastian.huber at embedded-brains.de>
Date: Fri Mar 1 10:10:19 2019 +0100
score: Fix _Scheduler_EDF_Cancel_job()
Remove the priority node only in case it is active.
---
cpukit/score/src/scheduleredfreleasejob.c | 6 ++++--
testsuites/sptests/spedfsched02/init.c | 17 +++++++++++++++++
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 d7865ff..f95e8bd 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 fde8516..0aea4c5 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 fec94d1..dc52f1f 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.
More information about the vc
mailing list