[rtems commit] score: Add and use _Thread_Owns_resources()

Sebastian Huber sebh at rtems.org
Tue Jun 3 07:02:46 UTC 2014


Module:    rtems
Branch:    master
Commit:    6c7caa1a9e1587dcc069aa811e9086c220b03ea8
Changeset: http://git.rtems.org/rtems/commit/?id=6c7caa1a9e1587dcc069aa811e9086c220b03ea8

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Wed May 28 13:37:54 2014 +0200

score: Add and use _Thread_Owns_resources()

---

 cpukit/posix/src/pthread.c                    |    4 ++--
 cpukit/rtems/src/tasksetpriority.c            |    2 +-
 cpukit/score/include/rtems/score/threadimpl.h |   17 +++++++++++++++++
 cpukit/score/src/coremutexsurrender.c         |    2 +-
 cpukit/score/src/threadrestart.c              |    2 +-
 5 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/cpukit/posix/src/pthread.c b/cpukit/posix/src/pthread.c
index ab197f3..6b1e555 100644
--- a/cpukit/posix/src/pthread.c
+++ b/cpukit/posix/src/pthread.c
@@ -115,7 +115,7 @@ void _POSIX_Threads_Sporadic_budget_TSR(
     printk( "TSR %d %d %d\n", the_thread->resource_count,
         the_thread->current_priority, new_priority );
   #endif
-  if ( the_thread->resource_count == 0 ) {
+  if ( !_Thread_Owns_resources( the_thread ) ) {
     /*
      *  If this would make them less important, then do not change it.
      */
@@ -161,7 +161,7 @@ void _POSIX_Threads_Sporadic_budget_callout(
     printk( "callout %d %d %d\n", the_thread->resource_count,
 	the_thread->current_priority, new_priority );
   #endif
-  if ( the_thread->resource_count == 0 ) {
+  if ( !_Thread_Owns_resources( the_thread ) ) {
     /*
      *  Make sure we are actually lowering it. If they have lowered it
      *  to logically lower than sched_ss_low_priority, then we do not want to
diff --git a/cpukit/rtems/src/tasksetpriority.c b/cpukit/rtems/src/tasksetpriority.c
index c7b0556..4e48356 100644
--- a/cpukit/rtems/src/tasksetpriority.c
+++ b/cpukit/rtems/src/tasksetpriority.c
@@ -48,7 +48,7 @@ rtems_status_code rtems_task_set_priority(
         the_thread->real_priority = _RTEMS_tasks_Priority_to_Core(
                                       new_priority
                                     );
-        if ( the_thread->resource_count == 0 ||
+        if ( !_Thread_Owns_resources( the_thread ) ||
              the_thread->current_priority > new_priority )
           _Thread_Change_priority( the_thread, new_priority, false );
       }
diff --git a/cpukit/score/include/rtems/score/threadimpl.h b/cpukit/score/include/rtems/score/threadimpl.h
index 5e76605..8b91730 100644
--- a/cpukit/score/include/rtems/score/threadimpl.h
+++ b/cpukit/score/include/rtems/score/threadimpl.h
@@ -785,6 +785,23 @@ RTEMS_INLINE_ROUTINE bool _Thread_Is_life_changing(
   return ( life_state & THREAD_LIFE_RESTARTING_TERMINATING ) != 0;
 }
 
+/**
+ * @brief Returns true if the thread owns resources, and false otherwise.
+ *
+ * Resources are accounted with the Thread_Control::resource_count resource
+ * counter.  This counter is used by semaphore objects for example.
+ *
+ * @param[in] the_thread The thread.
+ */
+RTEMS_INLINE_ROUTINE bool _Thread_Owns_resources(
+  const Thread_Control *the_thread
+)
+{
+  bool owns_resources = the_thread->resource_count != 0;
+
+  return owns_resources;
+}
+
 RTEMS_INLINE_ROUTINE void _Thread_Debug_set_real_processor(
   Thread_Control  *the_thread,
   Per_CPU_Control *cpu
diff --git a/cpukit/score/src/coremutexsurrender.c b/cpukit/score/src/coremutexsurrender.c
index fff3cd7..7a7a047 100644
--- a/cpukit/score/src/coremutexsurrender.c
+++ b/cpukit/score/src/coremutexsurrender.c
@@ -167,7 +167,7 @@ CORE_mutex_Status _CORE_mutex_Surrender(
      *  inherited priority must be lowered if this is the last
      *  mutex (i.e. resource) this task has.
      */
-    if ( holder->resource_count == 0 &&
+    if ( !_Thread_Owns_resources( holder ) &&
          holder->real_priority != holder->current_priority ) {
       _Thread_Change_priority( holder, holder->real_priority, true );
     }
diff --git a/cpukit/score/src/threadrestart.c b/cpukit/score/src/threadrestart.c
index 5c527d8..c65ef9a 100644
--- a/cpukit/score/src/threadrestart.c
+++ b/cpukit/score/src/threadrestart.c
@@ -47,7 +47,7 @@ static void _Thread_Make_zombie( Thread_Control *the_thread )
   ISR_lock_Context lock_context;
   Thread_Zombie_control *zombies = &_Thread_Zombies;
 
-  if ( the_thread->resource_count != 0 ) {
+  if ( _Thread_Owns_resources( the_thread ) ) {
     _Terminate(
       INTERNAL_ERROR_CORE,
       false,




More information about the vc mailing list