summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2010-07-27 01:48:46 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2010-07-27 01:48:46 +0000
commit37d6e55b984c7fb9256bd701f516cccd1d84779b (patch)
tree76fe770c1ce35241796c00e7b66f34c24d2ae272 /cpukit/rtems
parent2010-07-26 Joel Sherrill <joel.sherrill@oarcorp.com> (diff)
downloadrtems-37d6e55b984c7fb9256bd701f516cccd1d84779b.tar.bz2
2010-07-26 Joel Sherrill <joel.sherrilL@OARcorp.com>
* rtems/src/taskmode.c, score/inline/rtems/score/thread.inl: Rework a bit to eliminate unreachable path for task blocked while calling rtems_task_mode() on itself.
Diffstat (limited to 'cpukit/rtems')
-rw-r--r--cpukit/rtems/src/taskmode.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/cpukit/rtems/src/taskmode.c b/cpukit/rtems/src/taskmode.c
index 57872b11ce..40a456f2be 100644
--- a/cpukit/rtems/src/taskmode.c
+++ b/cpukit/rtems/src/taskmode.c
@@ -1,8 +1,7 @@
/*
- * RTEMS Task Manager
+ * RTEMS Task Manager - Change Task Mode
*
- *
- * COPYRIGHT (c) 1989-1999.
+ * COPYRIGHT (c) 1989-2010.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
@@ -32,8 +31,7 @@
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>
-/*PAGE
- *
+/*
* rtems_task_mode
*
* This directive enables and disables several modes of
@@ -84,7 +82,6 @@ rtems_status_code rtems_task_mode(
/*
* These are generic thread scheduling characteristics.
*/
-
if ( mask & RTEMS_PREEMPT_MASK )
executing->is_preemptible = _Modes_Is_preempt(mode_set) ? true : false;
@@ -99,14 +96,12 @@ rtems_status_code rtems_task_mode(
/*
* Set the new interrupt level
*/
-
if ( mask & RTEMS_INTERRUPT_MASK )
_Modes_Set_interrupt_level( mode_set );
/*
* This is specific to the RTEMS API
*/
-
is_asr_enabled = false;
needs_asr_dispatching = false;
@@ -121,9 +116,10 @@ rtems_status_code rtems_task_mode(
}
}
- if ( _System_state_Is_up( _System_state_Get() ) )
- if ( _Thread_Evaluate_mode() || needs_asr_dispatching )
+ if ( _System_state_Is_up( _System_state_Get() ) ) {
+ if (_Thread_Evaluate_is_dispatch_needed( needs_asr_dispatching ) )
_Thread_Dispatch();
+ }
return RTEMS_SUCCESSFUL;
}