From 59d1127f13d5bb2e4048ef2adbf59dc536689d48 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Wed, 10 Nov 1999 22:14:26 +0000 Subject: Corrected to account for the way memory is divided up in _Object_Extend_information. This change is a side-effect of the change made to that file to fix an alignment problem. --- c/src/exec/score/src/objectallocatebyindex.c | 16 +++++++++------- cpukit/score/src/objectallocatebyindex.c | 16 +++++++++------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/c/src/exec/score/src/objectallocatebyindex.c b/c/src/exec/score/src/objectallocatebyindex.c index 74f4c2c948..8c8528606d 100644 --- a/c/src/exec/score/src/objectallocatebyindex.c +++ b/c/src/exec/score/src/objectallocatebyindex.c @@ -43,25 +43,27 @@ Objects_Control *_Objects_Allocate_by_index( ) { Objects_Control *the_object; - void *p; if ( index && information->maximum >= index ) { + /* + * If the object is already in the local table, then + * it has already been allocated/created by a previous + * create call. + */ + the_object = _Objects_Get_local_object( information, index ); if ( the_object ) return NULL; /* XXX * This whole section of code needs to be addressed. - * + The 0 should be dealt with more properly so we can autoextend. - * + The pointer arithmetic is probably too expensive. + * + The use of the index 0 for object_blocks should be dealt + * with more properly so we can autoextend. * + etc. */ - p = _Addresses_Add_offset( information->object_blocks[ 0 ], - (information->allocation_size * information->name_length) ), + the_object = (Objects_Control *) information->object_blocks[ 0 ]; - p = _Addresses_Add_offset( p, (sizeof_control * (index - 1)) ); - the_object = (Objects_Control *)p; _Chain_Extract( &the_object->Node ); return the_object; diff --git a/cpukit/score/src/objectallocatebyindex.c b/cpukit/score/src/objectallocatebyindex.c index 74f4c2c948..8c8528606d 100644 --- a/cpukit/score/src/objectallocatebyindex.c +++ b/cpukit/score/src/objectallocatebyindex.c @@ -43,25 +43,27 @@ Objects_Control *_Objects_Allocate_by_index( ) { Objects_Control *the_object; - void *p; if ( index && information->maximum >= index ) { + /* + * If the object is already in the local table, then + * it has already been allocated/created by a previous + * create call. + */ + the_object = _Objects_Get_local_object( information, index ); if ( the_object ) return NULL; /* XXX * This whole section of code needs to be addressed. - * + The 0 should be dealt with more properly so we can autoextend. - * + The pointer arithmetic is probably too expensive. + * + The use of the index 0 for object_blocks should be dealt + * with more properly so we can autoextend. * + etc. */ - p = _Addresses_Add_offset( information->object_blocks[ 0 ], - (information->allocation_size * information->name_length) ), + the_object = (Objects_Control *) information->object_blocks[ 0 ]; - p = _Addresses_Add_offset( p, (sizeof_control * (index - 1)) ); - the_object = (Objects_Control *)p; _Chain_Extract( &the_object->Node ); return the_object; -- cgit v1.2.3