summaryrefslogtreecommitdiffstats
path: root/testsuites/sptests/Makefile.am
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-10-02 16:13:00 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-10-07 14:40:49 +0200
commit9b83a6654683d2f1f051533cdc41f39456303147 (patch)
tree96aeb75f7744b8e92e25494744766e2f534a1cbf /testsuites/sptests/Makefile.am
parentmghttpd: Requires POSIX to build server and tests (diff)
downloadrtems-9b83a6654683d2f1f051533cdc41f39456303147.tar.bz2
score: Critical fix for thread dispatching
The changes in _Thread_Dispatch() of commits dad36c52b8be5d7b46bc7af85655055db7208652 and d4dc7c8196355f08044e67a3f5c1e19485f17ff1 introduced a severe bug which destroys the real-time properties of RTEMS completely. Consider the following scenario. We have three tasks L (lowest priority), M (middle priority), and H (highest priority). Now let a thread dispatch from M to L happen. An interrupt occurs in _Thread_Dispatch() here: void _Thread_Dispatch( void ) { [...] post_switch: _ISR_Enable( level ); <-- INTERRUPT <-- AFTER INTERRUPT _Thread_Unnest_dispatch(); _API_extensions_Run_postswitch(); } The interrupt event makes task H ready. The interrupt code will see _Thread_Dispatch_disable_level > 0 and thus doesn't perform a _Thread_Dispatch(). Now we return to position "AFTER INTERRUPT". This means task L executes now although task H is ready! Task H will execute once someone calls _Thread_Dispatch().
Diffstat (limited to 'testsuites/sptests/Makefile.am')
-rw-r--r--testsuites/sptests/Makefile.am2
1 files changed, 1 insertions, 1 deletions
diff --git a/testsuites/sptests/Makefile.am b/testsuites/sptests/Makefile.am
index d791175060..479cdf6cd4 100644
--- a/testsuites/sptests/Makefile.am
+++ b/testsuites/sptests/Makefile.am
@@ -24,7 +24,7 @@ SUBDIRS = \
spintrcritical05 spintrcritical06 spintrcritical07 spintrcritical08 \
spintrcritical09 spintrcritical10 spintrcritical11 spintrcritical12 \
spintrcritical13 spintrcritical14 spintrcritical15 spintrcritical16 \
- spintrcritical17 spmkdir spmountmgr01 spheapprot \
+ spintrcritical17 spintrcritical18 spmkdir spmountmgr01 spheapprot \
spsimplesched01 spsimplesched02 spsimplesched03 spnsext01 \
spedfsched01 spedfsched02 spedfsched03 \
spcbssched01 spcbssched02 spcbssched03 spqreslib sptimespec01