summaryrefslogtreecommitdiffstats
path: root/cpukit/score/include/rtems/score/schedulerimpl.h
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-10-31 16:23:13 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-11-03 11:19:34 +0100
commit9e7fa07169083baebcac7aea9b13c61a8c27660e (patch)
tree592a2f6c12e5baf7b156a68169a5f83eebbc2d0f /cpukit/score/include/rtems/score/schedulerimpl.h
parentscore: Introduce thread resource count methods (diff)
downloadrtems-9e7fa07169083baebcac7aea9b13c61a8c27660e.tar.bz2
score: Relax _Scheduler_Set() restrictions
No longer unconditionally prevent scheduler changes if the thread owns resources. Prevent a scheduler change only in case other threads wait for the resource.
Diffstat (limited to 'cpukit/score/include/rtems/score/schedulerimpl.h')
-rw-r--r--cpukit/score/include/rtems/score/schedulerimpl.h9
1 files changed, 5 insertions, 4 deletions
diff --git a/cpukit/score/include/rtems/score/schedulerimpl.h b/cpukit/score/include/rtems/score/schedulerimpl.h
index 64c2c3ad28..46952d2756 100644
--- a/cpukit/score/include/rtems/score/schedulerimpl.h
+++ b/cpukit/score/include/rtems/score/schedulerimpl.h
@@ -1214,10 +1214,7 @@ RTEMS_INLINE_ROUTINE Status_Control _Scheduler_Set(
Scheduler_Node *new_scheduler_node;
Scheduler_Node *old_scheduler_node;
- if (
- _Thread_Owns_resources( the_thread )
- || the_thread->Wait.queue != NULL
- ) {
+ if ( the_thread->Wait.queue != NULL ) {
return STATUS_RESOURCE_IN_USE;
}
@@ -1237,6 +1234,10 @@ RTEMS_INLINE_ROUTINE Status_Control _Scheduler_Set(
}
#if defined(RTEMS_SMP)
+ if ( !_Chain_Has_only_one_node( &the_thread->Scheduler.Wait_nodes ) ) {
+ return STATUS_RESOURCE_IN_USE;
+ }
+
_Thread_Scheduler_process_requests( the_thread );
new_scheduler_node = _Thread_Scheduler_get_node_by_index(
the_thread,