diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-06-25 06:50:04 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-07-01 08:24:45 +0200 |
commit | f59f2fe93e90b09b012ef3e49eff2e86f22b6284 (patch) | |
tree | 1aa5924c91626c6d92e56a1b1755b1157a7b06ba | |
parent | score: Freechain handler API changes (diff) | |
download | rtems-f59f2fe93e90b09b012ef3e49eff2e86f22b6284.tar.bz2 |
score: Accept NULL pointer in _Freechain_Put()
With this a _Freechain_Put( _Freechain_Get() ) works always.
-rw-r--r-- | cpukit/score/include/rtems/score/freechain.h | 3 | ||||
-rw-r--r-- | cpukit/score/src/freechain.c | 4 | ||||
-rw-r--r-- | testsuites/sptests/spfreechain01/init.c | 2 |
3 files changed, 7 insertions, 2 deletions
diff --git a/cpukit/score/include/rtems/score/freechain.h b/cpukit/score/include/rtems/score/freechain.h index 7fa580a4e1..1540c0e2a1 100644 --- a/cpukit/score/include/rtems/score/freechain.h +++ b/cpukit/score/include/rtems/score/freechain.h @@ -93,7 +93,8 @@ void *_Freechain_Get( * @brief Puts a node back onto the freechain. * * @param[in] freechain The freechain control. - * @param[in] node The node to put back. + * @param[in] node The node to put back. The node may be @c NULL, in this case + * the function does nothing. */ void _Freechain_Put( Freechain_Control *freechain, diff --git a/cpukit/score/src/freechain.c b/cpukit/score/src/freechain.c index 84b4c63461..301e9b28b0 100644 --- a/cpukit/score/src/freechain.c +++ b/cpukit/score/src/freechain.c @@ -74,5 +74,7 @@ void *_Freechain_Get( void _Freechain_Put( Freechain_Control *freechain, void *node ) { - _Chain_Prepend_unprotected( &freechain->Free, node ); + if ( node != NULL ) { + _Chain_Prepend_unprotected( &freechain->Free, node ); + } } diff --git a/testsuites/sptests/spfreechain01/init.c b/testsuites/sptests/spfreechain01/init.c index 8963752d00..6efcd93762 100644 --- a/testsuites/sptests/spfreechain01/init.c +++ b/testsuites/sptests/spfreechain01/init.c @@ -40,6 +40,8 @@ static rtems_task Init(rtems_task_argument ignored) /* check whether freechain put and get works correctly*/ + _Freechain_Put(&fc, NULL); + puts( "INIT - Get node from freechain - OK" ); node = _Freechain_Get(&fc, malloc, 1, sizeof(test_node)); node->x = 1; |