summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-04-07 14:50:32 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-04-07 14:51:31 +0200
commit57c29858ce70615f2e203dd38fe3e5f0a2f0a6e0 (patch)
treee5933e14350ff681f068ce16c54d11e91ecbccb0
parente785fbaae519e096e636e1dcea5a739dfead8c46 (diff)
downloadrtems-57c29858ce70615f2e203dd38fe3e5f0a2f0a6e0.tar.bz2
score: Lazy key value pair allocation
-rw-r--r--cpukit/posix/src/key.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/cpukit/posix/src/key.c b/cpukit/posix/src/key.c
index b4f3e8a7ab..10fc3e9388 100644
--- a/cpukit/posix/src/key.c
+++ b/cpukit/posix/src/key.c
@@ -112,19 +112,23 @@ static bool _POSIX_Keys_Keypool_extend( Freechain_Control *keypool )
static void _POSIX_Keys_Initialize_keypool( void )
{
- Freechain_Control *keypool = &_POSIX_Keys_Keypool;
size_t initial_count = _POSIX_Keys_Get_initial_keypool_size();
size_t size = initial_count * sizeof( POSIX_Keys_Key_value_pair );
- POSIX_Keys_Key_value_pair *nodes = _Workspace_Allocate_or_fatal_error( size );
- _Freechain_Initialize( keypool, _POSIX_Keys_Keypool_extend );
+ if ( size > 0 ) {
+ Freechain_Control *keypool = &_POSIX_Keys_Keypool;
+ POSIX_Keys_Key_value_pair *nodes =
+ _Workspace_Allocate_or_fatal_error( size );
- _Chain_Initialize(
- &keypool->Freechain,
- nodes,
- initial_count,
- sizeof( *nodes )
- );
+ _Freechain_Initialize( keypool, _POSIX_Keys_Keypool_extend );
+
+ _Chain_Initialize(
+ &keypool->Freechain,
+ nodes,
+ initial_count,
+ sizeof( *nodes )
+ );
+ }
}
/**