summaryrefslogtreecommitdiffstats
path: root/cpukit/score/src/userextaddset.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-04-13 06:48:58 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-04-18 08:20:16 +0200
commit709f38a97287ff1aa8e8c0668c2d066e711db87c (patch)
treee711e14275c58c0ee8483468fca804476db0fdbd /cpukit/score/src/userextaddset.c
parentscore: _User_extensions_Handler_initialization() (diff)
downloadrtems-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.c14
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.