diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-11-07 10:11:17 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-11-13 09:20:57 +0100 |
commit | e5ae7c927c793fbb66fd00697d61aeb27c4c6e2c (patch) | |
tree | 032ce0fe42ea3ee56a78898785a422f13198b3f0 /cpukit/score/src | |
parent | score: Add and use RTEMS_ARRAY_SIZE() (diff) | |
download | rtems-e5ae7c927c793fbb66fd00697d61aeb27c4c6e2c.tar.bz2 |
score: Add and use _User_extensions_Iterate()
Replace the separate user extension iterations with a single iteration
function. This reduces code size and improves maintainability since the
iteration logic is only in one function. The runtime overhead is
insignificant.
Diffstat (limited to 'cpukit/score/src')
-rw-r--r-- | cpukit/score/src/userextiterate.c | 133 | ||||
-rw-r--r-- | cpukit/score/src/userextthreadbegin.c | 79 | ||||
-rw-r--r-- | cpukit/score/src/userextthreadcreate.c | 50 | ||||
-rw-r--r-- | cpukit/score/src/userextthreaddelete.c | 44 | ||||
-rw-r--r-- | cpukit/score/src/userextthreadrestart.c | 44 | ||||
-rw-r--r-- | cpukit/score/src/userextthreadstart.c | 44 |
6 files changed, 133 insertions, 261 deletions
diff --git a/cpukit/score/src/userextiterate.c b/cpukit/score/src/userextiterate.c new file mode 100644 index 0000000000..9f645e5056 --- /dev/null +++ b/cpukit/score/src/userextiterate.c @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Obere Lagerstr. 30 + * 82178 Puchheim + * Germany + * <rtems@embedded-brains.de> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + */ + +#if HAVE_CONFIG_H + #include "config.h" +#endif + +#include <rtems/score/userext.h> + +void _User_extensions_Thread_create_visitor( + Thread_Control *executing, + void *arg, + const User_extensions_Table *callouts +) +{ + User_extensions_thread_create_extension callout = callouts->thread_create; + + if ( callout != NULL ) { + User_extensions_Thread_create_context *ctx = arg; + + ctx->ok = ctx->ok && (*callout)( executing, ctx->created ); + } +} + +void _User_extensions_Thread_delete_visitor( + Thread_Control *executing, + void *arg, + const User_extensions_Table *callouts +) +{ + User_extensions_thread_delete_extension callout = callouts->thread_delete; + + if ( callout != NULL ) { + (*callout)( executing, arg ); + } +} + +void _User_extensions_Thread_start_visitor( + Thread_Control *executing, + void *arg, + const User_extensions_Table *callouts +) +{ + User_extensions_thread_start_extension callout = callouts->thread_start; + + if ( callout != NULL ) { + (*callout)( executing, arg ); + } +} + +void _User_extensions_Thread_restart_visitor( + Thread_Control *executing, + void *arg, + const User_extensions_Table *callouts +) +{ + User_extensions_thread_restart_extension callout = callouts->thread_restart; + + if ( callout != NULL ) { + (*callout)( executing, arg ); + } +} + +void _User_extensions_Thread_begin_visitor( + Thread_Control *executing, + void *arg, + const User_extensions_Table *callouts +) +{ + User_extensions_thread_begin_extension callout = callouts->thread_begin; + + if ( callout != NULL ) { + (*callout)( executing ); + } +} + +void _User_extensions_Thread_exitted_visitor( + Thread_Control *executing, + void *arg, + const User_extensions_Table *callouts +) +{ + User_extensions_thread_exitted_extension callout = callouts->thread_exitted; + + if ( callout != NULL ) { + (*callout)( executing ); + } +} + +void _User_extensions_Fatal_visitor( + Thread_Control *executing, + void *arg, + const User_extensions_Table *callouts +) +{ + User_extensions_fatal_extension callout = callouts->fatal; + + if ( callout != NULL ) { + const User_extensions_Fatal_context *ctx = arg; + + (*callout)( ctx->source, ctx->is_internal, ctx->error ); + } +} + +void _User_extensions_Iterate( + void *arg, + User_extensions_Visitor visitor +) +{ + const Chain_Node *node = _Chain_Immutable_first( &_User_extensions_List ); + const Chain_Node *tail = _Chain_Immutable_tail( &_User_extensions_List ); + Thread_Control *executing = _Thread_Executing; + + while ( node != tail ) { + const User_extensions_Control *extension = + (const User_extensions_Control *) node; + + (*visitor)( executing, arg, &extension->Callouts ); + + node = _Chain_Immutable_next( node ); + } +} diff --git a/cpukit/score/src/userextthreadbegin.c b/cpukit/score/src/userextthreadbegin.c deleted file mode 100644 index b3e673b18d..0000000000 --- a/cpukit/score/src/userextthreadbegin.c +++ /dev/null @@ -1,79 +0,0 @@ -/** - * @file - * - * @ingroup ScoreUserExt - * - * @brief User Extension Handler implementation. - */ - -/* - * COPYRIGHT (c) 1989-2007. - * On-Line Applications Research Corporation (OAR). - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.com/license/LICENSE. - */ - -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#include <rtems/system.h> -#include <rtems/score/userext.h> - -void _User_extensions_Thread_begin ( - Thread_Control *executing -) -{ - Chain_Node *the_node; - User_extensions_Control *the_extension; - - for ( the_node = _Chain_First( &_User_extensions_List ); - !_Chain_Is_tail( &_User_extensions_List, the_node ) ; - the_node = the_node->next ) { - - the_extension = (User_extensions_Control *) the_node; - - if ( the_extension->Callouts.thread_begin != NULL ) - (*the_extension->Callouts.thread_begin)( executing ); - } -} - -void _User_extensions_Thread_exitted ( - Thread_Control *executing -) -{ - Chain_Node *the_node; - User_extensions_Control *the_extension; - - for ( the_node = _Chain_Last( &_User_extensions_List ); - !_Chain_Is_head( &_User_extensions_List, the_node ) ; - the_node = the_node->previous ) { - - the_extension = (User_extensions_Control *) the_node; - - if ( the_extension->Callouts.thread_exitted != NULL ) - (*the_extension->Callouts.thread_exitted)( executing ); - } -} - -void _User_extensions_Fatal ( - Internal_errors_Source the_source, - bool is_internal, - Internal_errors_t the_error -) -{ - Chain_Node *the_node; - User_extensions_Control *the_extension; - - for ( the_node = _Chain_Last( &_User_extensions_List ); - !_Chain_Is_head( &_User_extensions_List, the_node ) ; - the_node = the_node->previous ) { - - the_extension = (User_extensions_Control *) the_node; - - if ( the_extension->Callouts.fatal != NULL ) - (*the_extension->Callouts.fatal)( the_source, is_internal, the_error ); - } -} diff --git a/cpukit/score/src/userextthreadcreate.c b/cpukit/score/src/userextthreadcreate.c deleted file mode 100644 index 21a1cb3056..0000000000 --- a/cpukit/score/src/userextthreadcreate.c +++ /dev/null @@ -1,50 +0,0 @@ -/** - * @file - * - * @ingroup ScoreUserExt - * - * @brief User Extension Handler implementation. - */ - -/* - * COPYRIGHT (c) 1989-2007. - * On-Line Applications Research Corporation (OAR). - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.com/license/LICENSE. - */ - -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#include <rtems/system.h> -#include <rtems/score/userext.h> - -bool _User_extensions_Thread_create ( - Thread_Control *the_thread -) -{ - Chain_Node *the_node; - User_extensions_Control *the_extension; - bool status; - - for ( the_node = _Chain_First( &_User_extensions_List ); - !_Chain_Is_tail( &_User_extensions_List, the_node ) ; - the_node = the_node->next ) { - - the_extension = (User_extensions_Control *) the_node; - - if ( the_extension->Callouts.thread_create != NULL ) { - status = (*the_extension->Callouts.thread_create)( - _Thread_Executing, - the_thread - ); - if ( !status ) - return false; - } - } - - return true; -} diff --git a/cpukit/score/src/userextthreaddelete.c b/cpukit/score/src/userextthreaddelete.c deleted file mode 100644 index 559bddb405..0000000000 --- a/cpukit/score/src/userextthreaddelete.c +++ /dev/null @@ -1,44 +0,0 @@ -/** - * @file - * - * @ingroup ScoreUserExt - * - * @brief User Extension Handler implementation. - */ - -/* - * COPYRIGHT (c) 1989-2007. - * On-Line Applications Research Corporation (OAR). - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.com/license/LICENSE. - */ - -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#include <rtems/system.h> -#include <rtems/score/userext.h> - -void _User_extensions_Thread_delete ( - Thread_Control *the_thread -) -{ - Chain_Node *the_node; - User_extensions_Control *the_extension; - - for ( the_node = _Chain_Last( &_User_extensions_List ); - !_Chain_Is_head( &_User_extensions_List, the_node ) ; - the_node = the_node->previous ) { - - the_extension = (User_extensions_Control *) the_node; - - if ( the_extension->Callouts.thread_delete != NULL ) - (*the_extension->Callouts.thread_delete)( - _Thread_Executing, - the_thread - ); - } -} diff --git a/cpukit/score/src/userextthreadrestart.c b/cpukit/score/src/userextthreadrestart.c deleted file mode 100644 index 17079add92..0000000000 --- a/cpukit/score/src/userextthreadrestart.c +++ /dev/null @@ -1,44 +0,0 @@ -/** - * @file - * - * @ingroup ScoreUserExt - * - * @brief User Extension Handler implementation. - */ - -/* - * COPYRIGHT (c) 1989-2007. - * On-Line Applications Research Corporation (OAR). - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.com/license/LICENSE. - */ - -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#include <rtems/system.h> -#include <rtems/score/userext.h> - -void _User_extensions_Thread_restart ( - Thread_Control *the_thread -) -{ - Chain_Node *the_node; - User_extensions_Control *the_extension; - - for ( the_node = _Chain_First( &_User_extensions_List ); - !_Chain_Is_tail( &_User_extensions_List, the_node ) ; - the_node = the_node->next ) { - - the_extension = (User_extensions_Control *) the_node; - - if ( the_extension->Callouts.thread_restart != NULL ) - (*the_extension->Callouts.thread_restart)( - _Thread_Executing, - the_thread - ); - } -} diff --git a/cpukit/score/src/userextthreadstart.c b/cpukit/score/src/userextthreadstart.c deleted file mode 100644 index c852e5d8c3..0000000000 --- a/cpukit/score/src/userextthreadstart.c +++ /dev/null @@ -1,44 +0,0 @@ -/** - * @file - * - * @ingroup ScoreUserExt - * - * @brief User Extension Handler implementation. - */ - -/* - * COPYRIGHT (c) 1989-2007. - * On-Line Applications Research Corporation (OAR). - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.com/license/LICENSE. - */ - -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#include <rtems/system.h> -#include <rtems/score/userext.h> - -void _User_extensions_Thread_start ( - Thread_Control *the_thread -) -{ - Chain_Node *the_node; - User_extensions_Control *the_extension; - - for ( the_node = _Chain_First( &_User_extensions_List ); - !_Chain_Is_tail( &_User_extensions_List, the_node ) ; - the_node = the_node->next ) { - - the_extension = (User_extensions_Control *) the_node; - - if ( the_extension->Callouts.thread_start != NULL ) - (*the_extension->Callouts.thread_start)( - _Thread_Executing, - the_thread - ); - } -} |