From 709f38a97287ff1aa8e8c0668c2d066e711db87c Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 13 Apr 2016 06:48:58 +0200 Subject: 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. --- cpukit/score/src/userextaddset.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'cpukit/score/src/userextaddset.c') 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 -#include #include -#include 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. -- cgit v1.2.3