summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems/src/regionextend.c
diff options
context:
space:
mode:
authorGlenn Humphrey <glenn.humphrey@oarcorp.com>2007-11-27 17:38:11 +0000
committerGlenn Humphrey <glenn.humphrey@oarcorp.com>2007-11-27 17:38:11 +0000
commit5700b804e2443135a07c6ff5f65a024e7be412fd (patch)
tree8177dd1b95bd7698eac495c8403c6bf7828e2cf3 /cpukit/rtems/src/regionextend.c
parent2007-11-27 Joel Sherrill <joel.sherrill@oarcorp.com> (diff)
downloadrtems-5700b804e2443135a07c6ff5f65a024e7be412fd.tar.bz2
2007-11-27 Glenn Humphrey <glenn.humphrey@OARcorp.com>
* rtems/src/regioncreate.c, rtems/src/regiondelete.c, rtems/src/regionextend.c, rtems/src/regiongetfreeinfo.c, rtems/src/regiongetinfo.c, rtems/src/regiongetsegment.c, rtems/src/regiongetsegmentsize.c, rtems/src/regionresizesegment.c, rtems/src/regionreturnsegment.c: Restructed to move the OBJECTS_LOCAL case to the top of the switch statement, have a single exit with one call to _RTEMS_Unlock_allocator and eliminate the fall-through return of RTEMS_INTERNAL_ERROR. These changes produced simplier assembly code and allowed for complete test coverage.
Diffstat (limited to 'cpukit/rtems/src/regionextend.c')
-rw-r--r--cpukit/rtems/src/regionextend.c76
1 files changed, 38 insertions, 38 deletions
diff --git a/cpukit/rtems/src/regionextend.c b/cpukit/rtems/src/regionextend.c
index 66e9fea936..d8ad00b55c 100644
--- a/cpukit/rtems/src/regionextend.c
+++ b/cpukit/rtems/src/regionextend.c
@@ -49,54 +49,54 @@ rtems_status_code rtems_region_extend(
uint32_t length
)
{
- Region_Control *the_region;
- Objects_Locations location;
uint32_t amount_extended;
Heap_Extend_status heap_status;
- rtems_status_code status;
+ Objects_Locations location;
+ rtems_status_code return_status = RTEMS_INTERNAL_ERROR;
+ Region_Control *the_region;
if ( !starting_address )
return RTEMS_INVALID_ADDRESS;
- status = RTEMS_SUCCESSFUL;
-
_RTEMS_Lock_allocator(); /* to prevent deletion */
- the_region = _Region_Get( id, &location );
- switch ( location ) {
-#if defined(RTEMS_MULTIPROCESSING)
- case OBJECTS_REMOTE: /* this error cannot be returned */
- _RTEMS_Unlock_allocator();
- return RTEMS_INTERNAL_ERROR;
-#endif
- case OBJECTS_ERROR:
- _RTEMS_Unlock_allocator();
- return RTEMS_INVALID_ID;
+ the_region = _Region_Get( id, &location );
+ switch ( location ) {
+
+ case OBJECTS_LOCAL:
+
+ heap_status = _Heap_Extend(
+ &the_region->Memory,
+ starting_address,
+ length,
+ &amount_extended
+ );
- case OBJECTS_LOCAL:
+ switch ( heap_status ) {
+ case HEAP_EXTEND_SUCCESSFUL:
+ the_region->length += amount_extended;
+ the_region->maximum_segment_size += amount_extended;
+ return_status = RTEMS_SUCCESSFUL;
+ break;
+ case HEAP_EXTEND_ERROR:
+ return_status = RTEMS_INVALID_ADDRESS;
+ break;
+ case HEAP_EXTEND_NOT_IMPLEMENTED:
+ return_status = RTEMS_NOT_IMPLEMENTED;
+ break;
+ }
+ break;
- heap_status = _Heap_Extend(
- &the_region->Memory,
- starting_address,
- length,
- &amount_extended
- );
+#if defined(RTEMS_MULTIPROCESSING)
+ case OBJECTS_REMOTE: /* this error cannot be returned */
+ break;
+#endif
- switch ( heap_status ) {
- case HEAP_EXTEND_SUCCESSFUL:
- the_region->length += amount_extended;
- the_region->maximum_segment_size += amount_extended;
- break;
- case HEAP_EXTEND_ERROR:
- status = RTEMS_INVALID_ADDRESS;
- break;
- case HEAP_EXTEND_NOT_IMPLEMENTED:
- status = RTEMS_NOT_IMPLEMENTED;
- break;
- }
- _RTEMS_Unlock_allocator();
- return( status );
- }
+ case OBJECTS_ERROR:
+ return_status = RTEMS_INVALID_ID;
+ break;
+ }
- return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */
+ _RTEMS_Unlock_allocator();
+ return return_status;
}