diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-04-07 14:50:32 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-04-07 14:51:31 +0200 |
commit | 57c29858ce70615f2e203dd38fe3e5f0a2f0a6e0 (patch) | |
tree | e5933e14350ff681f068ce16c54d11e91ecbccb0 /cpukit | |
parent | score: Delete _Thread_Ticks_per_timeslice (diff) | |
download | rtems-57c29858ce70615f2e203dd38fe3e5f0a2f0a6e0.tar.bz2 |
score: Lazy key value pair allocation
Diffstat (limited to 'cpukit')
-rw-r--r-- | cpukit/posix/src/key.c | 22 |
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 ) + ); + } } /** |