summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--c/src/exec/score/src/objectallocatebyindex.c16
-rw-r--r--cpukit/score/src/objectallocatebyindex.c16
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;