diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-10-02 16:13:00 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-10-07 14:40:49 +0200 |
commit | 9b83a6654683d2f1f051533cdc41f39456303147 (patch) | |
tree | 96aeb75f7744b8e92e25494744766e2f534a1cbf /testsuites/sptests/configure.ac | |
parent | mghttpd: Requires POSIX to build server and tests (diff) | |
download | rtems-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/configure.ac')
-rw-r--r-- | testsuites/sptests/configure.ac | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/testsuites/sptests/configure.ac b/testsuites/sptests/configure.ac index d568c11432..33a0755615 100644 --- a/testsuites/sptests/configure.ac +++ b/testsuites/sptests/configure.ac @@ -27,6 +27,7 @@ AC_CHECK_SIZEOF([time_t]) # Explicitly list all Makefiles here AC_CONFIG_FILES([Makefile +spintrcritical18/Makefile sp01/Makefile sp02/Makefile sp03/Makefile |