summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2010-07-26 22:03:18 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2010-07-26 22:03:18 +0000
commit77c330ce3d71a76495cee444da11ee1d99733117 (patch)
treec542ac7a2b70e3aa819220862c4906726d549d8f /cpukit
parent2010-07-26 Joel Sherrill <joel.sherrill@oarcorp.com> (diff)
downloadrtems-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/ChangeLog10
-rw-r--r--cpukit/libcsupport/src/privateenv.c3
-rw-r--r--cpukit/libmisc/cpuuse/cpuusagereport.c26
-rw-r--r--cpukit/posix/Makefile.am3
-rw-r--r--cpukit/posix/include/rtems/posix/key.h13
-rw-r--r--cpukit/posix/src/keycreate.c78
-rw-r--r--cpukit/posix/src/keydelete.c14
-rw-r--r--cpukit/posix/src/keyfreememory.c30
-rw-r--r--cpukit/score/src/iterateoverthreads.c11
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,&current_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 )