summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2015-06-25 06:50:04 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2015-07-01 08:24:45 +0200
commitf59f2fe93e90b09b012ef3e49eff2e86f22b6284 (patch)
tree1aa5924c91626c6d92e56a1b1755b1157a7b06ba /cpukit
parentscore: Freechain handler API changes (diff)
downloadrtems-f59f2fe93e90b09b012ef3e49eff2e86f22b6284.tar.bz2
score: Accept NULL pointer in _Freechain_Put()
With this a _Freechain_Put( _Freechain_Get() ) works always.
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/score/include/rtems/score/freechain.h3
-rw-r--r--cpukit/score/src/freechain.c4
2 files changed, 5 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 );
+ }
}