diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2010-07-26 22:03:18 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2010-07-26 22:03:18 +0000 |
commit | 77c330ce3d71a76495cee444da11ee1d99733117 (patch) | |
tree | c542ac7a2b70e3aa819220862c4906726d549d8f /cpukit | |
parent | 2010-07-26 Joel Sherrill <joel.sherrill@oarcorp.com> (diff) | |
download | rtems-77c330ce3d71a76495cee444da11ee1d99733117.tar.bz2 |
2010-07-26 Joel Sherrill <joel.sherrill@oarcorp.com>
* libcsupport/src/privateenv.c, libmisc/cpuuse/cpuusagereport.c,
posix/Makefile.am, posix/include/rtems/posix/key.h,
posix/src/keycreate.c, posix/src/keydelete.c,
score/src/iterateoverthreads.c: Since removing ITRON, the loop over
all APIs for tasks has a path that cannot be reached. Either modify
the code or mark tests for NULL as RTEMS_DEBUG.
* posix/src/keyfreememory.c: New file.
Diffstat (limited to 'cpukit')
-rw-r--r-- | cpukit/ChangeLog | 10 | ||||
-rw-r--r-- | cpukit/libcsupport/src/privateenv.c | 3 | ||||
-rw-r--r-- | cpukit/libmisc/cpuuse/cpuusagereport.c | 26 | ||||
-rw-r--r-- | cpukit/posix/Makefile.am | 3 | ||||
-rw-r--r-- | cpukit/posix/include/rtems/posix/key.h | 13 | ||||
-rw-r--r-- | cpukit/posix/src/keycreate.c | 78 | ||||
-rw-r--r-- | cpukit/posix/src/keydelete.c | 14 | ||||
-rw-r--r-- | cpukit/posix/src/keyfreememory.c | 30 | ||||
-rw-r--r-- | cpukit/score/src/iterateoverthreads.c | 11 |
9 files changed, 120 insertions, 68 deletions
diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index 3dad140228..76e74dc978 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,5 +1,15 @@ 2010-07-26 Joel Sherrill <joel.sherrill@oarcorp.com> + * libcsupport/src/privateenv.c, libmisc/cpuuse/cpuusagereport.c, + posix/Makefile.am, posix/include/rtems/posix/key.h, + posix/src/keycreate.c, posix/src/keydelete.c, + score/src/iterateoverthreads.c: Since removing ITRON, the loop over + all APIs for tasks has a path that cannot be reached. Either modify + the code or mark tests for NULL as RTEMS_DEBUG. + * posix/src/keyfreememory.c: New file. + +2010-07-26 Joel Sherrill <joel.sherrill@oarcorp.com> + * libfs/src/imfs/imfs_load_tar.c: Formatting. 2010-07-26 Joel Sherrill <joel.sherrill@oarcorp.com> diff --git a/cpukit/libcsupport/src/privateenv.c b/cpukit/libcsupport/src/privateenv.c index b46f8e000b..65e7658dd7 100644 --- a/cpukit/libcsupport/src/privateenv.c +++ b/cpukit/libcsupport/src/privateenv.c @@ -122,8 +122,7 @@ rtems_status_code rtems_libio_share_private_env(rtems_id task_id) rtems_user_env_t * shared_user_env; rtems_id current_task_id; - sc=rtems_task_ident(RTEMS_SELF,0,¤t_task_id); - if (sc != RTEMS_SUCCESSFUL) return sc; + current_task_id = rtems_task_self(); if (rtems_current_user_env->task_id==current_task_id) { /* kill the current user env & task_var*/ diff --git a/cpukit/libmisc/cpuuse/cpuusagereport.c b/cpukit/libmisc/cpuuse/cpuusagereport.c index 81076790ba..79ac92e7b2 100644 --- a/cpukit/libmisc/cpuuse/cpuusagereport.c +++ b/cpukit/libmisc/cpuuse/cpuusagereport.c @@ -1,7 +1,7 @@ /* * CPU Usage Reporter * - * COPYRIGHT (c) 1989-2009 + * COPYRIGHT (c) 1989-2010. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be @@ -71,8 +71,14 @@ void rtems_cpu_usage_report_with_plugin( _Timestamp_Subtract( &CPU_usage_Uptime_at_last_reset, &uptime, &total ); #else for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; api_index++ ) { - if ( !_Objects_Information_table[ api_index ] ) - continue; + /* + * Since the removal of ITRON, this cannot occur. + */ + #if defined(RTEMS_DEBUG) + if ( !_Objects_Information_table[ api_index ] ) + continue; + #endif + information = _Objects_Information_table[ api_index ][ 1 ]; if ( information ) { for ( i=1 ; i <= information->maximum ; i++ ) { @@ -98,11 +104,15 @@ void rtems_cpu_usage_report_with_plugin( "------------+----------------------------------------+---------------+---------\n" ); - for ( api_index = 1 ; - api_index <= OBJECTS_APIS_LAST ; - api_index++ ) { - if ( !_Objects_Information_table[ api_index ] ) - continue; + for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; api_index++ ) { + /* + * Since the removal of ITRON, this cannot occur. + */ + #if defined(RTEMS_DEBUG) + if ( !_Objects_Information_table[ api_index ] ) + continue; + #endif + information = _Objects_Information_table[ api_index ][ 1 ]; if ( information ) { for ( i=1 ; i <= information->maximum ; i++ ) { diff --git a/cpukit/posix/Makefile.am b/cpukit/posix/Makefile.am index a269c70b86..f71b34b48a 100644 --- a/cpukit/posix/Makefile.am +++ b/cpukit/posix/Makefile.am @@ -89,7 +89,8 @@ libposix_a_SOURCES += src/cond.c src/condattrdestroy.c \ ## KEY_C_FILES libposix_a_SOURCES += src/key.c src/keycreate.c src/keydelete.c \ - src/keygetspecific.c src/keyrundestructors.c src/keysetspecific.c + src/keygetspecific.c src/keyfreememory.c src/keyrundestructors.c \ + src/keysetspecific.c ## MEMORY_C_FILES libposix_a_SOURCES += src/mprotect.c diff --git a/cpukit/posix/include/rtems/posix/key.h b/cpukit/posix/include/rtems/posix/key.h index 1529076ce7..bfdae47a90 100644 --- a/cpukit/posix/include/rtems/posix/key.h +++ b/cpukit/posix/include/rtems/posix/key.h @@ -7,7 +7,7 @@ * This include file contains all the private support information for * POSIX key. * - * COPYRIGHT (c) 1989-2008. + * COPYRIGHT (c) 1989-2010. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be @@ -69,6 +69,17 @@ void _POSIX_Keys_Run_destructors( ); /** + * @brief Free Key Memory + * + * This memory frees the key table memory associated with @a the_key. + * + * @param[in] the_key is the POSIX key to free the table memory of. + */ +void _POSIX_Keys_Free_memory( + POSIX_Keys_Control *the_key +); + +/** * @brief _POSIX_Keys_Free * * This routine frees a keys control block to the diff --git a/cpukit/posix/src/keycreate.c b/cpukit/posix/src/keycreate.c index 1da82a3c34..15382bbe4a 100644 --- a/cpukit/posix/src/keycreate.c +++ b/cpukit/posix/src/keycreate.c @@ -1,5 +1,5 @@ /* - * COPYRIGHT (c) 1989-2007. + * COPYRIGHT (c) 1989-2010. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be @@ -23,8 +23,7 @@ #include <rtems/score/wkspace.h> #include <rtems/posix/key.h> -/*PAGE - * +/* * 17.1.1 Thread-Specific Data Key Create, P1003.1c/Draft 10, p. 163 */ @@ -56,52 +55,45 @@ int pthread_key_create( * * NOTE: Currently RTEMS Classic API tasks are always enabled. */ - - for ( the_api = 1; - the_api <= OBJECTS_APIS_LAST; - the_api++ ) { - - if ( _Objects_Information_table[ the_api ] ) { - #if defined(RTEMS_DEBUG) - /* - * Currently all managers are installed if the API is installed. - * This would be a horrible implementation error. - */ - if (_Objects_Information_table[ the_api ][ 1 ] == NULL ) - _Internal_error_Occurred( - INTERNAL_ERROR_CORE, - true, - INTERNAL_ERROR_IMPLEMENTATION_KEY_CREATE_INCONSISTENCY - ); - #endif - bytes_to_allocate = sizeof( void * ) * - (_Objects_Information_table[ the_api ][ 1 ]->maximum + 1); - table = _Workspace_Allocate( bytes_to_allocate ); - if ( !table ) { - for ( --the_api; - the_api >= 1; - the_api-- ) - _Workspace_Free( the_key->Values[ the_api ] ); - - _POSIX_Keys_Free( the_key ); - _Thread_Enable_dispatch(); - return ENOMEM; - } - - the_key->Values[ the_api ] = table; - memset( table, '\0', bytes_to_allocate ); - } else { - the_key->Values[ the_api ] = NULL; + for ( the_api = 1; the_api <= OBJECTS_APIS_LAST; the_api++ ) { + the_key->Values[ the_api ] = NULL; + + #if defined(RTEMS_DEBUG) + /* + * Since the removal of ITRON, this cannot occur. + */ + if ( !_Objects_Information_table[ api_index ] ) + continue; + + /* + * Currently all managers are installed if the API is installed. + * This would be a horrible implementation error. + */ + if (_Objects_Information_table[ the_api ][ 1 ] == NULL ) + _Internal_error_Occurred( + INTERNAL_ERROR_CORE, + true, + INTERNAL_ERROR_IMPLEMENTATION_KEY_CREATE_INCONSISTENCY + ); + #endif + + bytes_to_allocate = sizeof( void * ) * + (_Objects_Information_table[ the_api ][ 1 ]->maximum + 1); + table = _Workspace_Allocate( bytes_to_allocate ); + if ( !table ) { + _POSIX_Keys_Free_memory( the_key ); + + _POSIX_Keys_Free( the_key ); + _Thread_Enable_dispatch(); + return ENOMEM; } - + the_key->Values[ the_api ] = table; + memset( table, '\0', bytes_to_allocate ); } _Objects_Open_u32( &_POSIX_Keys_Information, &the_key->Object, 0 ); - *key = the_key->Object.id; - _Thread_Enable_dispatch(); - return 0; } diff --git a/cpukit/posix/src/keydelete.c b/cpukit/posix/src/keydelete.c index d4c58dd4cc..99b6e7eedd 100644 --- a/cpukit/posix/src/keydelete.c +++ b/cpukit/posix/src/keydelete.c @@ -23,18 +23,15 @@ #include <rtems/score/wkspace.h> #include <rtems/posix/key.h> -/*PAGE - * +/* * 17.1.3 Thread-Specific Data Key Deletion, P1003.1c/Draft 10, p. 167 */ - int pthread_key_delete( pthread_key_t key ) { - register POSIX_Keys_Control *the_key; - Objects_Locations location; - uint32_t the_api; + POSIX_Keys_Control *the_key; + Objects_Locations location; the_key = _POSIX_Keys_Get( key, &location ); switch ( location ) { @@ -42,15 +39,12 @@ int pthread_key_delete( case OBJECTS_LOCAL: _Objects_Close( &_POSIX_Keys_Information, &the_key->Object ); - for ( the_api = 1; the_api <= OBJECTS_APIS_LAST; the_api++ ) - if ( the_key->Values[ the_api ] ) - _Workspace_Free( the_key->Values[ the_api ] ); + _POSIX_Keys_Free_memory( the_key ); /* * NOTE: The destructor is not called and it is the responsibility * of the application to free the memory. */ - _POSIX_Keys_Free( the_key ); _Thread_Enable_dispatch(); return 0; diff --git a/cpukit/posix/src/keyfreememory.c b/cpukit/posix/src/keyfreememory.c new file mode 100644 index 0000000000..a103499b6a --- /dev/null +++ b/cpukit/posix/src/keyfreememory.c @@ -0,0 +1,30 @@ +/* + * COPYRIGHT (c) 1989-2010. + * 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. + * + * $Id$ + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems/system.h> +#include <rtems/score/thread.h> +#include <rtems/score/wkspace.h> +#include <rtems/posix/key.h> + +void _POSIX_Keys_Free_memory( + POSIX_Keys_Control *the_key +) +{ + uint32_t the_api; + + for ( the_api = 1; the_api <= OBJECTS_APIS_LAST; the_api++ ) + if ( the_key->Values[ the_api ] ) + _Workspace_Free( the_key->Values[ the_api ] ); +} diff --git a/cpukit/score/src/iterateoverthreads.c b/cpukit/score/src/iterateoverthreads.c index 2e9b28eaba..0cd8679f8d 100644 --- a/cpukit/score/src/iterateoverthreads.c +++ b/cpukit/score/src/iterateoverthreads.c @@ -5,7 +5,7 @@ * for all threads * invoke specified function * - * COPYRIGHT (c) 1989-2003. + * COPYRIGHT (c) 1989-2010. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be @@ -33,8 +33,13 @@ void rtems_iterate_over_all_threads(rtems_per_thread_routine routine) return; for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; api_index++ ) { - if ( !_Objects_Information_table[ api_index ] ) - continue; + /* + * Since the removal of ITRON, this cannot occur. + */ + #if defined(RTEMS_DEBUG) + if ( !_Objects_Information_table[ api_index ] ) + continue; + #endif information = _Objects_Information_table[ api_index ][ 1 ]; if ( !information ) |