Simplify _User_extensions_Handler_initialization(). --- cpukit/score/src/userext.c | 51 +++++++++++++++++++++------------------------- 1 file changed, 23 insertions(+), 28 deletions(-)
diff --git a/cpukit/score/src/userext.c b/cpukit/score/src/userext.c index 1ac622e..b4d4b0a 100644 --- a/cpukit/score/src/userext.c +++ b/cpukit/score/src/userext.c @@ -23,37 +23,32 @@ #include <rtems/score/userextimpl.h> #include <rtems/score/wkspace.h> -typedef struct { - User_extensions_Switch_control *switch_control; -} User_extensions_Switch_context; - -static void _User_extensions_Switch_visitor( - Thread_Control *executing, - void *arg, - const User_extensions_Table *callouts -) +void _User_extensions_Handler_initialization(void) { - User_extensions_thread_switch_extension callout = callouts->thread_switch; + User_extensions_Switch_control *initial_extension_switch_controls; + const User_extensions_Table *initial_table; + uint32_t n; + uint32_t i; - if ( callout != NULL ) { - User_extensions_Switch_context *ctx = arg; - User_extensions_Switch_control *ctrl = ctx->switch_control; + n = rtems_configuration_get_number_of_initial_extensions(); - _Chain_Append_unprotected( &_User_extensions_Switches_list, &ctrl->Node ); - ctrl->thread_switch = callout; + initial_extension_switch_controls = _Workspace_Allocate_or_fatal_error( + n * sizeof( *initial_extension_switch_controls ) + ); - ctx->switch_control = ctrl + 1; - } -} + initial_table = rtems_configuration_get_user_extension_table(); -void _User_extensions_Handler_initialization(void) -{ - User_extensions_Switch_control *initial_extension_switch_controls = - _Workspace_Allocate_or_fatal_error( - rtems_configuration_get_number_of_initial_extensions() - * sizeof( *initial_extension_switch_controls ) - ); - User_extensions_Switch_context ctx = { initial_extension_switch_controls }; - - _User_extensions_Iterate( &ctx, _User_extensions_Switch_visitor ); + for ( i = 0 ; i < n ; ++i ) { + User_extensions_thread_switch_extension callout; + + callout = initial_table[ i ].thread_switch; + + if ( callout != NULL ) { + User_extensions_Switch_control *c; + + c = &initial_extension_switch_controls[ i ]; + c->thread_switch = callout; + _Chain_Append_unprotected( &_User_extensions_Switches_list, &c->Node ); + } + } } -- 1.8.4.5 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel