[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