diff options
Diffstat (limited to '')
-rw-r--r-- | cpukit/score/include/rtems/score/userextimpl.h | 4 | ||||
-rw-r--r-- | cpukit/score/include/rtems/sysinit.h | 4 | ||||
-rw-r--r-- | cpukit/score/src/userextiterate.c | 33 |
3 files changed, 26 insertions, 15 deletions
diff --git a/cpukit/score/include/rtems/score/userextimpl.h b/cpukit/score/include/rtems/score/userextimpl.h index 6684c4a264..5ad2c63765 100644 --- a/cpukit/score/include/rtems/score/userextimpl.h +++ b/cpukit/score/include/rtems/score/userextimpl.h @@ -307,7 +307,7 @@ static inline void _User_extensions_Fatal( _User_extensions_Iterate( &ctx, _User_extensions_Fatal_visitor, - CHAIN_ITERATOR_BACKWARD + CHAIN_ITERATOR_FORWARD ); } @@ -318,7 +318,7 @@ static inline void _User_extensions_Thread_terminate( _User_extensions_Iterate( executing, _User_extensions_Thread_terminate_visitor, - CHAIN_ITERATOR_FORWARD + CHAIN_ITERATOR_BACKWARD ); } diff --git a/cpukit/score/include/rtems/sysinit.h b/cpukit/score/include/rtems/sysinit.h index 7923385cd1..bd4778ab5c 100644 --- a/cpukit/score/include/rtems/sysinit.h +++ b/cpukit/score/include/rtems/sysinit.h @@ -55,8 +55,8 @@ extern "C" { #define RTEMS_SYSINIT_POSIX_BARRIER 000367 #define RTEMS_SYSINIT_POSIX_RWLOCK 000368 #define RTEMS_SYSINIT_POSIX_SHM 000369 -#define RTEMS_SYSINIT_POSIX_CLEANUP 00036a -#define RTEMS_SYSINIT_POSIX_KEYS 00036b +#define RTEMS_SYSINIT_POSIX_KEYS 00036a +#define RTEMS_SYSINIT_POSIX_CLEANUP 00036b #define RTEMS_SYSINIT_IDLE_THREADS 000380 #define RTEMS_SYSINIT_LIBIO 000400 #define RTEMS_SYSINIT_ROOT_FILESYSTEM 000401 diff --git a/cpukit/score/src/userextiterate.c b/cpukit/score/src/userextiterate.c index 6e143765c2..04fe278639 100644 --- a/cpukit/score/src/userextiterate.c +++ b/cpukit/score/src/userextiterate.c @@ -7,7 +7,7 @@ */ /* - * Copyright (c) 2012, 2016 embedded brains GmbH. All rights reserved. + * Copyright (c) 2012, 2017 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Dornierstr. 4 @@ -154,8 +154,9 @@ void _User_extensions_Iterate( ) { Thread_Control *executing; - const User_extensions_Table *callouts_current; - const User_extensions_Table *callouts_end; + const User_extensions_Table *initial_current; + const User_extensions_Table *initial_begin; + const User_extensions_Table *initial_end; const Chain_Node *end; Chain_Node *node; User_extensions_Iterator iter; @@ -163,17 +164,18 @@ void _User_extensions_Iterate( executing = _Thread_Get_executing(); - callouts_current = rtems_configuration_get_user_extension_table(); - callouts_end = callouts_current - + rtems_configuration_get_number_of_initial_extensions(); + initial_begin = rtems_configuration_get_user_extension_table(); + initial_end = + initial_begin + rtems_configuration_get_number_of_initial_extensions(); - while ( callouts_current != callouts_end ) { - (*visitor)( executing, arg, callouts_current ); + if ( direction == CHAIN_ITERATOR_FORWARD ) { + initial_current = initial_begin; - ++callouts_current; - } + while ( initial_current != initial_end ) { + (*visitor)( executing, arg, initial_current ); + ++initial_current; + } - if ( direction == CHAIN_ITERATOR_FORWARD ) { end = _Chain_Immutable_tail( &_User_extensions_List.Active ); } else { end = _Chain_Immutable_head( &_User_extensions_List.Active ); @@ -213,4 +215,13 @@ void _User_extensions_Iterate( _Chain_Iterator_destroy( &iter.Iterator ); _User_extensions_Release( &lock_context ); + + if ( direction == CHAIN_ITERATOR_BACKWARD ) { + initial_current = initial_end; + + while ( initial_current != initial_begin ) { + --initial_current; + (*visitor)( executing, arg, initial_current ); + } + } } |