From 37d6e55b984c7fb9256bd701f516cccd1d84779b Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 27 Jul 2010 01:48:46 +0000 Subject: 2010-07-26 Joel Sherrill * 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. --- cpukit/rtems/src/taskmode.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) (limited to 'cpukit/rtems') 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 #include -/*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; } -- cgit v1.2.3