diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-04-13 06:48:58 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-04-18 08:20:16 +0200 |
commit | 709f38a97287ff1aa8e8c0668c2d066e711db87c (patch) | |
tree | e711e14275c58c0ee8483468fca804476db0fdbd /cpukit/score/src/userextaddset.c | |
parent | score: _User_extensions_Handler_initialization() (diff) | |
download | rtems-709f38a97287ff1aa8e8c0668c2d066e711db87c.tar.bz2 |
score: Use chain iterator for user extensions
Add a lock and use a chain iterator for safe iteration during concurrent
user extension addition and removal.
Ensure that dynamically added thread delete and fatal extensions are
called in reverse order.
Update #2555.
Update #2692.
Diffstat (limited to 'cpukit/score/src/userextaddset.c')
-rw-r--r-- | cpukit/score/src/userextaddset.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/cpukit/score/src/userextaddset.c b/cpukit/score/src/userextaddset.c index f34ad0072f..19bbd361e9 100644 --- a/cpukit/score/src/userextaddset.c +++ b/cpukit/score/src/userextaddset.c @@ -20,20 +20,20 @@ #endif #include <rtems/score/userextimpl.h> -#include <rtems/score/objectimpl.h> #include <rtems/score/percpu.h> -#include <rtems/score/sysstate.h> void _User_extensions_Add_set( User_extensions_Control *the_extension ) { - _Assert( - _Objects_Allocator_is_owner() - || _System_state_Is_before_multitasking( _System_state_Get() ) - ); + ISR_lock_Context lock_context; - _Chain_Append_unprotected( &_User_extensions_List, &the_extension->Node ); + _User_extensions_Acquire( &lock_context ); + _Chain_Append_unprotected( + &_User_extensions_List.Active, + &the_extension->Node + ); + _User_extensions_Release( &lock_context ); /* * If a switch handler is present, append it to the switch chain. |