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/userextremoveset.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'cpukit/score/src/userextremoveset.c') diff --git a/cpukit/score/src/userextremoveset.c b/cpukit/score/src/userextremoveset.c index 5b3fdd1aea..b25cc344b4 100644 --- a/cpukit/score/src/userextremoveset.c +++ b/cpukit/score/src/userextremoveset.c @@ -20,16 +20,21 @@ #endif #include -#include #include void _User_extensions_Remove_set ( User_extensions_Control *the_extension ) { - _Assert( _Objects_Allocator_is_owner() ); + ISR_lock_Context lock_context; + _User_extensions_Acquire( &lock_context ); + _Chain_Iterator_registry_update( + &_User_extensions_List.Iterators, + &the_extension->Node + ); _Chain_Extract_unprotected( &the_extension->Node ); + _User_extensions_Release( &lock_context ); /* * If a switch handler is present, remove it. -- cgit v1.2.3